• 締切済み

ファイル名の検索について

現在、あるフォルダの中に存在するテキストファイル名を列挙するソースを書いているのですが、よく分らない現象が出ていて困っています。 たとえば、デスクトップ上のtestというフォルダの中にa.txtと言うテキストファイルがあるとして、下記のプログラムを実行したところ、3回も検索されてしまいます。(メッセージボックスが"a.txt"で3回繰り返される) なぜ、このような現象が起ってしまうか、検討がつきません。何方か、心当たりがあるかた、ご教授願います。 開発環境 VC++2003, Win2000 pro sp4 <ソース> #defien FILE_PATH "C:/Documents and Setting/Administrator/デスクトップ/test/*.txt" HANDLE hFind; WIN32_FIND_DATA strW32fdata; char cMsg[ 256 ]; hFind = FindFirstFile( FILE_PATH, &strW32fdata); if( hFind != INVALID_HANDLE_VALUE ) { do { MessageBox( strW32fdata.cFileName, "file", MB_OK | MB_ICONINFORMATION ); }while( FindNextFile( hFind, &strW32fdata ) ); FindClose( hFind ); } よろしくお願い致します。

みんなの回答

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.1

次の理由で提示されたソースは信用できない。 >#defien とか。ありえないキーワード。 したがって推測ですが、 ひょっとしたら [1] カレントディレクトリ . [2] 親ディレクトリ   .. [3] a.txt これで3回ヒットしているのかもしれない。

関連するQ&A

  • C言語 ファイル検索

    ファイルを検索するときなんですが*.cのファイルを検索するには下のように書くんですが、*.exeのように2種類のファイルを検索すにはどう付け加えればいいでしょうか? void DoFind() { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; /* 最初のファイル検索 */ hFind = FindFirstFile("*.c", &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return; /******** エラー終了 ********/ } do { /* 更新時間取得 */ FileTimeToLocalFileTime(&fd.ftLastWriteTime, &ft); FileTimeToSystemTime(&ft, &st); /* 結果の表示 */ printf("ファイル名: %s", fd.cFileName); if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("(ディレクトリ)"); } printf("\n短いファイル名: %s\n", fd.cAlternateFileName); printf("ファイルサイズ: %d\n", fd.nFileSizeLow); printf("更新日: %04d/%02d/%02d %02d:%02d:%02d\n\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); } while(FindNextFile(hFind, &fd)); '次のファイルを検索 /* 検索終了 */ FindClose(hFind); }

  • C言語

    *.cファイルを検索するんですがmain.cのファイルだけを検索しないようにするにはどう付け加えればいいでしょうか? void DoFind() { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; /* 最初のファイル検索 */ hFind = FindFirstFile("*.c", &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return; /******** エラー終了 ********/ } do { /* 結果の表示 */ printf("ファイル名: %s", fd.cFileName); } while(FindNextFile(hFind, &fd)); '次のファイルを検索 /* 検索終了 */ FindClose(hFind); }

  • MessageBoxが表示されないのは何で

    以下の様なコーディングではメッセージボックスが表示されません。 最終的にやりたいことは、ディレクトリー検索で取得したファイル名(w32fd.cFileName)から"."または".."を除外したいのですが・・・。 char a1[] = ".\0"; char a2[] = "..\0"; hfind = FindFirstFile ( (LPCTSTR)buf , &w32fd ) ; if ( hfind != INVALID_HANDLE_VALUE ){ do { if (w32fd.cFileName == a1 || w32fd.cFileName == a2){ MessageBox ( NULL, "STOP", "STOP", MB_OK ); } ~略~ } while ( FindNextFile ( hfind, &w32fd ) ) ; お手数ですがご教授お願いします。

  • Linuxでフォルダ内全ファイル名の読み込み

    windowsで以下のような,フォルダ内の全ファイルのファイル名を先頭から順に読みこんでいき,読み込むごとにmain2()で処理を行うというプログラムを作りました. これを急遽Linuxで動作させなければならなくなったのですが,windows.hを使用しているので当然動きません. Linuxでdirent.hを使用して動かすにはどうすればよいのでしょうか. あつかましいでしょうが,急ぎの用なので出来れば書き直していただけるとありがたいです. char FilePathBmp[] = "temp\\*.bmp"; // ← Tempフォルダ内のbmpファイルを指定しています char FindPathBmp[50]; HANDLE hFind; WIN32_FIND_DATA fd; CreateColortable(); hFind = FindFirstFile( FilePathBmp, &fd ); do { strcpy( FindPathBmp, fd.cFileName ); main2(FindPathBmp); } while( FindNextFile( hFind, &fd ) );

  • ファイル名のリスト取得について2

    windowsで任意のフォルダにあるファイル名のリストを取得する方法を教えて頂きました。 ※例えば*.ecdのファイルリストを取得する場合です。 これを作成された日付が古い順に取得する事は出来ますでしょうか #include <windows.h> #include <stdio.h> int main() { WIN32_FIND_DATA ffd; HANDLE h = FindFirstFile("d:\\work\\*.ecd", &ffd); if ( h != INVALID_HANDLE_VALUE ) { do { puts(ffd.cFileName); } while ( FindNextFile(h, &ffd) ); FindClose(h); } }

  • C言語のプログラムのエラーについて教えてください

    ディレクトリの一覧を調べるようなプログラムを組みました。 参考にしたURLはhttp://q.hatena.ne.jp/1118121349です。 しかし、fatal error C1083: include ファイルを開けません。'stdafx.h': No such file or directoryとエラーが発生しました。 なぜ、エラーが生じているのか教えていただけないでしょうか? よろしくお願いします #include <stdafx.h> #include <windows.h> #include <stdio.h> int main(int argc, char* argv[]) { char dir[512]/*カレントディレクトリ*/,wc[512]/*ワイルドカード付文字列*/; HANDLE hSearch; //見つかったファイルのハンドル WIN32_FIND_DATA fd; //検索データ ::GetCurrentDirectory(512,dir); //カレントディレクトリ取得 wsprintf(wc,”%s¥¥*.*”,dir); //ワイルドカード作成 hSearch=::FindFirstFile(wc,&fd); //最初の検索で使用する関数 if(hSearch!=INVALID_HANDLE_VALUE){ //ファイルが見つかったら次の処理 do{ if(strcmp(fd.cFileName,”.”)&&strcmp(fd.cFileName,”..”)){ //カレントフォルダ、親フォルダは無視 if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY ){ printf(”%s¥¥¥n”,fd.cFileName); //ファイルがディレクトリなら表示に”¥”をつける } else{ printf(”%s¥n”,fd.cFileName); //ファイルならそのまま表示 } } } while(::FindNextFile(hSearch,&fd)); //ファイルがなくなるまで継続 } FindClose(hSearch); //ハンドルを閉じる return 0; }

  • 文字列のコピー

    ecoFileListに文字列をコピーしたいのですが、エラーになります。 どなたか教えて下さい int DML_Backup::searchEcoDataFileName(char (*ecoFileList)[32]) { map_type files; WIN32_FIND_DATA find_data; HANDLE handle = FindFirstFile("*.ecd", &find_data); if ( handle != INVALID_HANDLE_VALUE) { do { files.insert(map_type::value_type( find_data.ftLastWriteTime, find_data.cFileName)); } while ( FindNextFile( handle, &find_data) ); FindClose(handle); } for ( map_type::iterator iter = files.begin(); iter != files.end(); ++iter ) { lstrcpy(*ecoFileList, iter->second); ecoFileList++; } }

  • ColdFusionのファイル検索法

    ColdFusionで、フォルダの中のファイルを検索することは可能なのでしょうか?? <CFIF aというフォルダ中にTest.txtというファイルがあれば> <CFFILE ACTION="Read" FILE="C:\\a\text.txt" ~~~~~~~~ </CFIF> としたいのですが、IF文の部分はどのようにすれば良いのでしょうか??

  • C++のCopyFileでメモリが増える

    C++にあるCopyFile関数でフォルダをコピーする関数を作成しました。 コピー関数を使うプログラムは常駐プログラムです。 Aフォルダに決められたファイルが作成されたら、A1フォルダを作成してそのなかにAフォルダのファイルをコピーしていきます。 A1の次はA2、A3…というふうにどんどんファイルをコピーしていくのですが、メモリが増えていくだけで、減りません。 このままいくとメモリリークとなってしまうと思うのですが、なぜ増えて行くのでしょうか? 下がプログラムです。 int FoldersCopy(CString from, CString to) { HANDLE hSearch; WIN32_FIND_DATA fd; CString FindPath; //検索用のパス FindPath = from; //コピー if (FindPath.Right(1) != L"\\") { FindPath += L"\\"; } FindPath += L"*.*"; hSearch = FindFirstFile(FindPath, &fd); while(TRUE) { if (!FindNextFile(hSearch, &fd)) { break; } if (fd.cFileName != L"." || fd.cFileName != L"..") { CString fFilepath, tFilepath; fFilepath = from + fd.cFileName; tFilepath = to + fd.cFileName; CopyFile(fFilepath, tFilepath, TRUE); fFilepath.Empty(); tFilepath.Empty(); } } FindClose(hSearch); return 0; } 解放はしっかりやっていると思うのですが、何かいけない場所はありますか? そもそも常駐プログラムでファイルコピーをしたらダメなのでしょうか? よろしくお願い致します。

  • ファイル検索

    こんにちは。質問させてください。 あるフォルダ(ここでは$dir = "c:\\test\\file_data\\"とでもしておきます。)内に テキストファイルが複数存在するとします。 test1218.01.file1.txt test1218.10.file1.txt test1218.11.file1.txt test1219.01.file1.txt test1219.10.file1.txt test1219.11.file1.txt test1219.01.file2.txt test1219.10.file2.txt test1219.11.file2.txt 上記のようなファイル名のテキストファイルが存在したとします。 それでこのテキストファイルのうち、以下のファイルの内容を画面に表示したいと 考えています。 test1219.01.file1.txt test1219.10.file1.txt test1219.11.file1.txt 1219(今日の日付という意味), file1(一回目のファイルという意味)で 構成された上記のファイルを指定されたディレクトリ($dir)以下で 検索し上記のファイル名を取得し、また取得したファイルの中身を 表示するロジックを考えています。 ひとつのファイルを取得することはできたのですが、 複数となる(上記の場合は3つ当てはまることはわからないので 指定する日付などで取得ファイル数がかなりことなる)ため うまく書くことができません。 どなたかいいロジックなどをお持ちでしたら ぜひ伝授していただけたらと考えています。 どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP