- 締切済み
C言語でコマンド引数にワイルドカードを使うには?サブディレクトリも探索させるには?
C言語で(下記の環境で) ワイルドカードを使うにはどうしたら良いでしょうか? 現在作成中のプログラムで、program.exe data1012.log とかいう形で処理ができるようになりました。ところで、引数に書いたdata1012.logとかが、300個ぐらいあるとして(あるいは別のdirectoryに更に1000個とか、そういうdirが20個ぐらいあり)これを、program.exe *.logとして、一発で処理させることはできるでしょうか?ワイルドカードの展開と、サブディレクトリの探索どちらかだけでもありがたいです。 どうぞよろしくお願い致します。 環境:Borland C v5.5 無料版, windows2000 (DOS窓), ThinkPadです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- KojiS
- ベストアンサー率46% (145/312)
当方無料版ではないので無料版はどうなのかわかりません。 ワイルドカードの展開ですが、ワイルドカードを展開するべきかどうかと言う事も考えなければいけないと思います。 ファイルの検索だけでしたら、ワイルドカードを展開せずとも、ワイルドカードのまま findfirst等で検索出来るでしょう。 ワイルドカードを展開したい場合は、WILDARGS.OBJをリンクするか、自分で展開するかです。 WILDARGS.OBJをリンクすると、ファイルがたくさんあった場合に困ると思います。 自分で展開する場合は、DOSのワイルドカードでしたらある程度簡単なアルゴリズムで可能でしょう。ワイルドカードがどう展開されるか考えてみましょう。 正規表現のようなものや複雑なワイルドカードをやりたい場合は、正規表現ライブラリの様な物を探すと良いかもしれません。 サブディレクトリをたどりたければ、同様にファイル検索するのですが、その時にディレクトリ属性だけを検索するようにすればよいでしょう。 後は、再帰処理にするか、工夫するかです。
お礼
ありがとうございます。ご回答の意味がわかるまでweb検索で色々調べました。 (1) findfirst(), findnext()なる関数が #include<dir.h>で使用可能になることが、ある海外サイトのC関数の説明で、わかりました。(手持ちの処理系で実施したら動作しました)。大変便利だと感激しています。サブディレクトリ検索もできるオプションがあるようです。サブディレクトリ検索各dirに移って全*.logに対して実施する、方法で今は対処しています。 (2)あと、lib/wildargs.objも無料版にも見つかりました。どうやってリンクするか、リンクした後どうやって使うのか等方法がまだわかりません。よってこちらはまだ試していません。対象ファイル数が多すぎる場合、確かにご指摘どおり、上記の,findfirst()関数を用いたほうが問題が生じなさそうで簡便に思えました。 最初は、ご回答のレベルが、非常に高く感じられすぎて、わからなかったです。が、ご回答のkeywordを元にいろいろ調査した結果、良くわかるようになりました。敷居が高くて怖い感じだったC言語にこれまでよりも少し親近感がもてるようになりました。 ありがとうございました。今後ともよろしくお願い致します。