ページ 11

ファイル名からフォルダに振り分けるソース

Posted: 2013年11月27日(水) 18:57
by cotton618
ファイル名を参照し、指定されたものだけフォルダに振り分けることのできるようなソースはないでしょうか?
そのようなフリーソフトはいくつか見つけたのですが、ソースが欲しいです。

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月27日(水) 19:33
by beatle
C言語標準ライブラリの rename 関数を使えばファイルの移動ができます。
C言語 ファイル名 フォルダ名の変更と移動 - stdio.h - [ rename ]

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月27日(水) 19:40
by cotton618
ありがとうございます。
こちらを利用してみます。
ファイル名の頭の文字や末尾の文字からフォルダに分ける場合にはどのようにしたらよいでしょうか?
たとえば
gazou001.png
gazou002.png
・・・
gazou011.png
gazou012.png
・・・
gazou098.png
gazou099.png
と、001から099まで存在し、gazou0X1.pngのものはgazou0X1フォルダに入れる、などとしたい場合にはどのようなソースを書けばよいのでしょうか?

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月27日(水) 23:35
by beatle
例えばhoge.txtをdir\hoge.txtに移動したい場合は下記のコードです

コード:

rename("hoge.txt", "dir\\hoge.txt");

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月28日(木) 13:41
by へろりくしょん
任意のディレクトリ等からファイルを検索し、見つかったファイルのファイル名から、振り分けたい。
と言う事だと思いますが。


環境が何も書いてないので、C言語だと仮定しますが、
C言語の標準的な機能のみでは不可能です。

まずは環境を書いてください。

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月28日(木) 15:57
by cotton618
すみません、C++言語で行っています。
ファイル自体を移動させたいのではなく、ファイル名だけを書き写したい…という表現のほうが適切かと思います。

ファイル名の羅列されているtxtの中から、欲しいファイル名のみピックアップし別のtxtに一覧として書き出す。
というようなことです。

gazou.txt
=========
gazou001.png
gazou002.png
gazou003.png
gazou004.png
gazou005.png

gazou096.png
gazou097.png
gazou098.png
gazou099.png

という画像の名前が一覧で書かれたファイルがあった場合に、
gazou0X1.pngのみ、つまり
gazou001.png
gazou011.png
gazou021.png
gazou031.png
gazou041.png
gazou051.png
gazou061.png
gazou071.png
gazou081.png
gazou091.png

を別のファイル(gazou0X1.txt)に書き出すようにしたいと思っています。

Re: ファイル名からフォルダに振り分けるソース

Posted: 2013年11月28日(木) 20:58
by beatle
なるほど、そういうことですか。
ファイルを振り分けると聞くと、ファイルを実際に移動したいのだと思ってしまいます。

cotton618さんがやりたいのは単なる文字列の処理ということで良いですね?
実際のファイルが関係するのは、ファイル名一覧を記録したgazou.txtと書き出すファイルgazou0X1.txtのみで、後は単なる文字列の操作だけですね?

それなら
  • gazou.txtから1行ずつ読み込んで(fscanfなり、fgetsなりを使えばいいでしょう)
  • 数字の部分で処理を分けて(if文でいけると思います)
  • gazou0X1.txtに書き出す
という手順でどうでしょう。

「gazou001.png」の中で「gazou」の部分は固定なのかどうか、「001」の部分の桁数は固定されているのかなどで難易度は変わると思いますが、基本的には上記の流れでいけると思います。
具体的にどの部分の処理が分からない、など有りましたらご質問ください。
課題の丸投げは禁止の掲示板ですから、cotton618さんが出来る所までご自分で頑張ってください。