• ベストアンサー

C言語にてプログラミングを行っていて、FindFirstFileにてフ

C言語にてプログラミングを行っていて、FindFirstFileにてファイル名を取得しようとしていますがうまくいきません。 第一引数に「D:\test\aaa*」と指定して、aaa01、aaa02、aaa03のようなファイル名が取得したいと考えています。 FindFirstFileの戻り値として、INVALID_HANDLE_VALUEがくるため目的の動作になりません。 上記のような事はできないのでしょうか? いろいろ調べてみましたが解決できなくて質問させていただきました。 以上ですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

バカにしているようで申し訳ないですがもう一度設定周りを見直してみてはいかがてしょう? 良くあるケースだと。 1. INIに記述したPATHが間違えてる 2. INIからPATHを取得できてない 3. ほんとに存在しない。 ですね。 1.と2.については、INIから取得したPATHを printf() 等にて出力して その出力されたPATHを dir コマンドに渡してあげるコトで確認できると思います。 手入力じゃなくてコピペするようにしてください。 あとINIに指定したものを取得してFileFindFirstにわたすのなら\のエスケープは不要です。 エスケープはコンパイラの都合ですから。。 1.2.3.やってもだめなら、他の回答にあるように GetLastErrorから終了の原因を突き止めるしかありませんね。

その他の回答 (6)

  • yuipu
  • ベストアンサー率38% (18/47)
回答No.7

引数を取得するところと、それを使ってFindFirstFileコールするまでをソース引用で見せていただければみなさんのコメントがつきやすいんじゃないでしょうか。 このドキュメントはご覧になってますよね。 http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

  • semisemi
  • ベストアンサー率72% (8/11)
回答No.5

一旦、SetCurrentDirectory("D:\\test"); として、カレントディレクトを"D:\test"へ移動しておいて、 そこで FindFirstFile("aaa*", &fd); としてみてもダメでしょうか? あと、GetLastError関数で拡張エラー情報を取得したら何かわかりませんか? int main(void) { HANDLE hFind; WIN32_FIND_DATA fd; /* カレントディレクトリを変更 */ SetCurrentDirectory("D:\\test"); /* 戻り値のチェックを行うこと */ hFind = FindFirstFile("aaa*", &fd); if (hFind == INVALID_HANDLE_VALUE) { fprintf(stderr, "ファイルを取得できません。\n"); return 1; } /* 次々列挙 */ do { //ファイル名の表示 printf("%s\n", fd.cFileName); } while (FindNextFile(hFind, &fd)); /* 開放 */ FindClose(hFind); return 0; } //end of main

回答No.4

第一引数ですが、「"D:\\test\\aaa*"」としてますか?

19820202
質問者

補足

ご回答ありがとうございます。 指摘いただきました通り、「"D:\\test\\aaa*"」としてみましたが、結果は同様でした。 その他の原因で考えられるものはありますでしょうか? ちなみに「\\」にする理由はエスケープシーケンスの意味でしょうか? 「"D:\\test\\aaa*"」はiniファイルより抽出するのでつける必要があるのかなと感じていました。 以上です。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.3

このあたりは参考になるでしょう。 引数は変数ですか?変数はどう記述してますか? char * name[] = "D:\test\aaa*" ; ですか? char * name[] = "D:\\test\\aaa*" ; で\は\\にしてみましょう。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc429233.aspx
19820202
質問者

補足

ご回答ありがとうございます。 指摘いただきました通り、「"D:\\test\\aaa*"」としてみましたが、結果は同様でした。 その他の原因で考えられるものはありますでしょうか? 以上です。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

あと aaa* より aaa*.* じゃないでしょうか

19820202
質問者

補足

ご回答ありがとうございます。 指摘いただきました通り、「"D:\\test\\aaa*"」としてみましたが、結果は同様でした。 また、拡張子が無いファイルの検索を行いたいので、「aaa*」としています。 その他の原因で考えられるものはありますでしょうか? 以上です。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

FindFirstFile("D:\\test\\aaa*", &fd); のように\を2回指定してるでしょうか。

関連するQ&A

専門家に質問してみよう