アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語にてプログラミングを行っていて、FindFirstFileにてファイル名を取得しようとしていますがうまくいきません。

第一引数に「D:\test\aaa*」と指定して、aaa01、aaa02、aaa03のようなファイル名が取得したいと考えています。

FindFirstFileの戻り値として、INVALID_HANDLE_VALUEがくるため目的の動作になりません。

上記のような事はできないのでしょうか?

いろいろ調べてみましたが解決できなくて質問させていただきました。

以上ですが、よろしくお願いいたします。

A 回答 (7件)

バカにしているようで申し訳ないですがもう一度設定周りを見直してみてはいかがてしょう?


良くあるケースだと。
1. INIに記述したPATHが間違えてる
2. INIからPATHを取得できてない
3. ほんとに存在しない。
ですね。

1.と2.については、INIから取得したPATHを printf() 等にて出力して
その出力されたPATHを dir コマンドに渡してあげるコトで確認できると思います。
手入力じゃなくてコピペするようにしてください。

あとINIに指定したものを取得してFileFindFirstにわたすのなら\のエスケープは不要です。
エスケープはコンパイラの都合ですから。。
1.2.3.やってもだめなら、他の回答にあるように GetLastErrorから終了の原因を突き止めるしかありませんね。
    • good
    • 0

引数を取得するところと、それを使ってFindFirstFileコールするまでをソース引用で見せていただければみなさんのコメントがつきやすいんじゃないでしょうか。



このドキュメントはご覧になってますよね。
http://msdn.microsoft.com/ja-jp/library/cc429233 …
    • good
    • 0

一旦、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
    • good
    • 0

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

この回答への補足

ご回答ありがとうございます。

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

ちなみに「\\」にする理由はエスケープシーケンスの意味でしょうか?
「"D:\\test\\aaa*"」はiniファイルより抽出するのでつける必要があるのかなと感じていました。

以上です。

補足日時:2010/08/13 10:12
    • good
    • 0

このあたりは参考になるでしょう。


引数は変数ですか?変数はどう記述してますか?
char * name[] = "D:\test\aaa*" ; ですか?
char * name[] = "D:\\test\\aaa*" ; で\は\\にしてみましょう。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc429233 …

この回答への補足

ご回答ありがとうございます。

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

以上です。

補足日時:2010/08/13 09:33
    • good
    • 0

あと


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

この回答への補足

ご回答ありがとうございます。

指摘いただきました通り、「"D:\\test\\aaa*"」としてみましたが、結果は同様でした。
また、拡張子が無いファイルの検索を行いたいので、「aaa*」としています。

その他の原因で考えられるものはありますでしょうか?

以上です。

補足日時:2010/08/13 09:34
    • good
    • 0

FindFirstFile("D:\\test\\aaa*", &fd);



のように\を2回指定してるでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!