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

このQ&Aのポイント
  • Linuxでフォルダ内の全ファイル名を読み込む方法
  • Windowsで使用しているプログラムをLinuxで動作させる方法
  • 急ぎの用事でLinuxで動作させる必要がある場合の対応方法
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.1

カレントのtestディレクトリ以下を表示するサンプルです。 > 急ぎの用なので出来れば書き直していただけるとありがたいです. 書き直したかったのですが、あまりにもWin32APIだらけなので サンプルを掲載しました。 お急ぎでしたら #ifdef __GNUC__ でも使って切り替えてみてはどうでしょう? #include <stdio.h> #include <dirent.h> #include <stdlib.h> int main(int argc, char **argv) { char *str; DIR *dp; struct dirent *dir; dp = opendir("test"); if(!dp) exit(0); while((dir = readdir(dp)) != NULL) printf("%s\n", dir->d_name); return 0; }

seagal07
質問者

お礼

お早い回答、ありがとうございました。 早速試してみます。

関連するQ&A

  • 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 ) ) ; お手数ですがご教授お願いします。

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

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

    現在、あるフォルダの中に存在するテキストファイル名を列挙するソースを書いているのですが、よく分らない現象が出ていて困っています。 たとえば、デスクトップ上の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 ); } よろしくお願い致します。

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

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

  • 実行ファイルのサブフォルダのファイル名変更で

    h = FindFirstFile("bitmap\\*.txt", &fd); if(h == INVALID_HANDLE_VALUE){   MessageBox(NULL, "ファイルが見つかりませ    ん", "エラー", MB_OK | MB_ICONERROR | MB_RIGHT); return 1; } このようにして実行ファイルのサブフォルダにあるtxtファイルを見つけることはできるのですが、このサブフォルダにあるtxtファイルのファイル名を1に変更しようとMoveFile( fd.cFileName, filename )などとしてもファイル名が変更できません。サブフォルダではなく、、((h = FindFirstFile("*.txt", &fd)のように指定して、実行ファイルにあるtxtのファイル名は変更できます。この実行ファイルのサブフォルダにある任意のtxtファイルを見つけだし、ファイル名を変える何かいい方法があればご教授お願いいたします。

  • [C++]WCHARの1文字目しか表示できない

    あるWebサイトによると以下のプログラムでディレクトリ内の ファイル一覧を表示できるそうだ。たしかにファイル一覧を 表示できた。しかし、わたしの電子計算機上では、 ファイル名の1文字目しか表示できない。 なおfd.cFileNameはWCHARという配列のようだ。fd.cFileName[2]のように 文字位置を指定すれば、1文字目以降を取得できる。 Windows XP SP3 Visual C++ 2008 Express Edition ーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> #include <string> #include <iostream> #include "windows.h" using namespace std; int main(int argc, char *argv[]) { HANDLE hFind; WIN32_FIND_DATA fd; FILETIME ft; SYSTEMTIME st; wstring FName; FName = L"*.*"; /* 最初のファイル検索 */ hFind = FindFirstFile(FName.c_str(), &fd); /* 検索失敗? */ if(hFind == INVALID_HANDLE_VALUE) { printf("検索失敗\n"); return(0); /******** エラー終了 ********/ } while(FindNextFile(hFind, &fd)){ 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); } /* 検索終了 */ FindClose(hFind); return(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); }

  • 同じ画像検索プログラム

    私は今、同じ画像を探し出すプログラムを作っています。 大体の手順としては、 同じ画像を探したい画像ファイル名を手動で入力し読み込み、 その後FindFirstFileで指定したディレクトリにある同じ拡張子を探して、 手動で指定した画像のデータと同じかどうかを比べ、 さらにその後FindNextFileを用いてディレクトリ内の画像ファイルを次々と調べていくというようなものです。 プログラムを大体以下のよう作り実行してみたところ、 一枚目の比較はうまくいくのですが、 二枚目以降の比較になると何故か手動で入力した画像ファイルのデータが変化してしまいます。 具体的には輝度値がFindFirstFileで収得した一枚目との比較のときは100であったのに、 FindNextFileで収得した二枚目以降との比較になると-1になってしまうという感じです。 すなわち、同じ画像を二枚続けて収得しても、 一枚目の画像は同じ、二枚目の画像は異なっていると認識してしまうのです。 この説明では分かりにくいかもしれませんが、 どのような原因、解決法が考えられるか分かる方がいらっしゃったら教えてください。 以下は私が作成したプログラムの大体の内容です HANDLE hFind; WIN32_FIND_DATA fd; 同じ画像を探したい画像ファイル読み込み部 hFind = FindFirstFile("指定ディレクトリ", &fd); do { 収得ファイル読み込み部 画像比較部 }while(FindNextFile(hFind, &fd));

  • ファイルの読み込みが変

    Slackware(64bit)というLinuxでプログラミングしていました。 (gcc 4.3.3 glibc 2.9) そこで出た問題点をこのソースに書きます。 #include<unistd.h> #include<stdio.h> char buf[800]; FILE *fd; void op(void) { fd=fopen("/sys/class/power_supply/AC/online","r"); } int main(void) { int i,x; op(); for (i=0;i<5;i++) { fscanf(fd,"%d",&x); printf("%d",x); getchar(); rewind(fd); } fclose(fd); return 0; } (使い回しなので余計なものがついてます) fopenで開くファイルはパソコンのACアダプタが入ると'1'、入らないと'0'になります。 このプログラムを実行しました。 1(ACアダプタつけてenter) 0(はずしてenter) 0(つけてenter) 0(つけてenter) 0(つけてenter) では、fdをmainで宣言して、opの引数にすればとやってみたら、fscanfに渡るfdが、NULLでSIGSEGVを起こしました。 どうして、こうなるのでしょうか? 複数の関数でファイルをどう扱えばいいのですか?

専門家に質問してみよう