プロが教える店舗&オフィスのセキュリティ対策術

Visual Studio C++ 2010 Expressを利用して、C言語のプログラムを作成しています。
その中でFindFirstFileを使っています。
Visual Studio上でWin32コンソールアプリのプロジェクトを作成して、このプログラムをコンパイルしました。
プロジェクトのプロパティは変更していません。
コンパイルしたものを実行すると戻り値としてINVALID_HANDLE_VALUEが返ってきて、ファイルのリストを取得できませんでした。

一方で、コマンドプロンプト上でMakefileを作成し、同じソースをコンパイルした場合は、ファイルのリストを正常に取得することが出来ます。
従いまして、おそらくプログラムは問題ないと思います。

Visual Studioのプロジェクトで、何かプロパティの設定が必要でしょうか?

実行環境は、Windows7 64-bitです。

何かご存知の方いらっしゃいましたら、教えて頂けますか?

A 回答 (2件)

>FindFirstFileに指定した引数の文字列は、"C:\\Temp\\*.avi"などです。



なんというか、お約束ですが…
VC++2010EEでの文字セットは何になっていますか?

デフォルトのままだと「UNICODE文字セットを使用する」になっているかと思われますが。
# で…そのまんま"C:\\Temp\\*.avi"の指定だと警告かエラーかになるかと……。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おっしゃる通り、プロジェクトのプロパティの文字セットを「UNICODE文字セットを使用する」にしてました。
「マルチバイト文字セットを使用する」に変更して、動作するようになりました。
久しぶりのVisual Studioのプログラミングで、この変更をするのをすっかり失念していました。

お礼日時:2011/10/07 16:14

INVALID_HANDLE_VALUEの時、さらに、GetLastError()で、詳細なエラー要因を


取得できるはずです。それで調べてみましょう。
カレントパスの問題ではないですか?

この回答への補足

お返事ありがとうございます。
GetLastError()で値とってみると ERROR_FILE_NOT_FOUND で指定されたファイルが見つかりません、となっていました。
FindFirstFileに指定した引数の文字列は、"C:\\Temp\\*.avi"などです。
この.aviのファイルは、いくつか存在ます。
カレントパスの問題かとも思って、SetCurrentDirectory()で、"C:\\Temp"と指定したりもしましたが、GetLastError()の戻り値は、 ERROR_FILE_NOT_FOUND のままでした。

他に何か見るべきところはあるでしょうか?

同じプログラムで、コマンドプロンプト上でコンパイルしたときには問題にならないので、何が違うのか良く分からないです。

補足日時:2011/10/07 15:38
    • good
    • 0

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