こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

デスクトップ上の全ファイル取得のサンプル

こちら【http://okwave.jp/qa/q3230202.html】にある、デスクトップ上の全ファイル取得のサンプルを動かしてみたいのですが、うまく動作しません。
一日頭ひねって考えましたが何が原因なのかよくわからないので、アドバイスをお願いします。

開発環境:
Windows7
Microsoft Visual Studio 2010
新規作成→プロジェクト→Win32 コンソールアプリケーション(アプリケーションの種類:コンソールアプリケーション、空のオブジェクト)

ソースをそのままデバッグしようとすると70行目(lstrcpy( szPath, argv[1] ); argv[1]にエラーの赤線有)
2 番目の引数を 'char *' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
と表示され、ビルドに失敗します。

自分なりにエラーを改善して、

・#include <windows.h>の下の行に#pragma comment(lib, "shlwapi.lib")の追加
・int main( int argc, TCHAR *argv[] )へ書き変え

を行いました。
この二点でビルドは成功し、実行ファイルが生成されましたが、
コマンドプロンプトで実行した際に、どんなパスを入力してもうまく動作しません(全フォルダ数0、全ファイル数0しか出ない、ファイルPが3つ見つかるなど(もちろんこんなファイルはありません))

コマンドプロンプトに入力した文字は
***.exe "C:\Users\***\Desktop"
(***はファイル名とユーザー名なので省略させていただいています。)

それからソースを読んでいてひとつわからなかったところがあるのですが、do while文の中の、
if ( fdFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
のif文ですが、&はひとつでいいのでしょうか。&が一つだとどういう意味になるんでしょうか・・

アドバイスよろしくお願いします。

投稿日時 - 2013-07-12 15:03:05

QNo.8173238

すぐに回答ほしいです

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

プロジェクトの文字セットがUNICODE文字セットを使用するようになっているため、TCHARはwchar_t、LPCTSTRはLPCWSTRと定義されている状況なのでしょう。mainの引数を強引にTCHARにしても、実際のデータはchar*なので、うまくいくはずがありません。
プロジェクトの設定を変更して、マルチバイト文字セットを使用するようにしてみましょう。

なお、&&は論理積、&は(ビット毎の)AND計算です。

投稿日時 - 2013-07-12 15:29:33

お礼

マルチバイト文字セットを使用する必要があったのですね。うまく動作しました。
ありがとうございました。

投稿日時 - 2013-07-15 14:20:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問