• ベストアンサー

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

semisemiの回答

  • 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

関連するQ&A

  • 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); }

  • FindFirstFile ハンドル開放

    dat.datファイルの情報を、WIN32_FIND_DATA構造体に得るために  handle = FindFirstFile("dat.dat", &win32finddata);  FindClose(handle);  //この後でwin32finddataを利用。 としているんだけど、今回はハンドルを使わないから  FindFirstFile("dat.dat", &win32finddata);  //この後でwin32finddataを利用。 として、FindFirstFileの返り値の取得と、FindClose関数を 省略してもいいんですか?

  • FindFirstFileについて

    いつもお世話になっております。 今日はファイル検索についてお聞きしたいことがあります。 FindFirstFileを使ってフォルダ内のファイルを取得し、表示することを 目的とし、それはできたのですが、ファイルだけでなくフォルダも表示してしまいます。 「.」があるかないかで分別しようと思ったのですが デバッガで見たところフォルダの最後にもなぜか「.」がついていたので どのようにしたらいいか思いつきませんでした。 調べてみたのですが特定の拡張子を表示というものはありましたが フォルダ以外のすべてのファイルを表示したいです。 いいアイデアがありましたらご教授願います。

  • c:¥gooは存在するの?

    WIN32_FIND_DATA ffd; HANDLE hf; hf=FindFirstFile("c:\\goo",&ffd); if(hf==INVALID_HANDLE_VALUE)  cout<<"\"c:\\goo\"は存在しません"<<endl; において hf==INVALID_HANDLE_VALUE であればc:¥gooは存在しないとみなして言いのでしょうか? もしc:¥gooが存在することがあればどういうときでしょうか?

  • FindFirstFileについて教えてください。

    Visual Studio C++ 2010 Expressを利用して、C言語のプログラムを作成しています。 その中でFindFirstFileを使っています。 Visual Studio上でWin32コンソールアプリのプロジェクトを作成して、このプログラムをコンパイルしました。 プロジェクトのプロパティは変更していません。 コンパイルしたものを実行すると戻り値としてINVALID_HANDLE_VALUEが返ってきて、ファイルのリストを取得できませんでした。 一方で、コマンドプロンプト上でMakefileを作成し、同じソースをコンパイルした場合は、ファイルのリストを正常に取得することが出来ます。 従いまして、おそらくプログラムは問題ないと思います。 Visual Studioのプロジェクトで、何かプロパティの設定が必要でしょうか? 実行環境は、Windows7 64-bitです。 何かご存知の方いらっしゃいましたら、教えて頂けますか?

  • プログラミング言語の取得方法

    現在はエクセルVBA・HTMLが使っております。プログラミングに興味を持ち、また、スキルアップのため本格的なプログラミング言語を取得をしたいと思います。 そこで、C言語やアセンブラなど様々な言語があるのですが、どれを取得したら良いのでしょうか? また、エクセルVBAなら、エクセル上でセル操作、ファイル操作等ができますが、C言語等を使いこなせると、一体どういうことができるのでしょうか? よろしくお願いします。

  • C言語によるガンマ関数の記述

    今、C言語を用いてガンマ関数を計算する方法を模索中でです。 理想的にはガンマ関数の引数に数値を入れたら戻り値を返すというのがいいのですがそうもうまくいかないと思います。 そこで以下のような形で整数の場合と非整数の場合で作ることを考えています。しかし、引数が整数のときはわかるのですが、非整数のときがわかりません。どうしたらよいでしょうか。 以下に関数の概要を掲載します。 ==========関数の概要=========== 関数名:Gamma(x) 戻り値:double 引数:x[double] 1)引数が0より大きい整数(1,2,3...)のとき   階乗の自己回帰文を使用して計算 2)引数が0より大きい非整数の場合 ==========▲ここまで==========

  • 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言語で作成したいと考えています。 ディレクトリ配下には、最大で100MB位のファイルが約100件存在する 想定です。 (ファイルのサイズ、件数は実行毎に異なります。) そこで2点ほど教えていただきたいことがあります。 1.基本的に、UNIXコマンドのtrコマンドでで置換するより、C言語で   全てのファイルを開き1行ずつ、「置換文字列のチェック」→   「置換文字列が存在すれば置換」→「ファイル書込み」と行った   ほうが早いものでしょうか?   (trコマンドを実行したところ、10分待っても処理が完了しませんでした。) 2.C言語にてディレクトリ配下のファイル名を取得し、ファイルの   件数分ループさせるにはどのようにすればよいのでしょうか?   execコマンドにて「ls -l test.txt | awk '{print $○}'」   (ファイル名のみ取得)の結果をファイルに出力し、そのファイル   からファイル名を取得し、EOFになるまでループすることで出来る   と思いますが、この方法は一般的でしょうか?   出来れば余計なファイルは、作成したくないと考えています。 ご回答の方、よろしくお願いします。

  • ファイル名のリスト取得について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); } }