• ベストアンサー

カレントディレクトリ内のファイルを配列に読むには?

カレントディレクトリ内のファイルの中で指定した拡張子のファイルを全て配列に読み込ませるプログラムを書こうと頑張っています。 しかし、方針がわからず困っています。 方針だけでも良いので教えていただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

質問する時には、開発&実行環境と、何がわからないのか具体的に記載して下さい。 方針とは何でしょう? C言語においての配列などの考え方が解らないのか、ディレクトリを取得する方法がわからないのでしょうか? 理論だけ簡単に記載すると… ディレクトリとは、ファイル目次が書かれた特殊なファイルです。 目的のディレクトリファイルから、ファイル名を読み出して、メモリに格納すれば良いです。 MacやLinuxなら、opendir, readdir この辺の関数で読み出せます。 Winなら、FindFirstFileEx, FindNextFile この辺の関数で読み出せます。 配列に取り込む場合、Winの場合はショートなのかロングなのか、Mac/LinuxならUTFの扱い、など考慮して設計して下さい。

saterain20
質問者

お礼

ありがとうございます。初めて耳にする関数なので参考にさせていただきます。 作業環境は osがwindowsで、visualstudioでコンパイルしています。 特にディレクトリを取得する方法がわかっていません。 よろしくお願いします。

saterain20
質問者

補足

ありがとうございます。無事書くことができました。

その他の回答 (1)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

http://q.hatena.ne.jp/1118121349 が参考になるのでは? printfの代わりに配列に入力するとか。

saterain20
質問者

お礼

ありがとうございます。 #include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> int main( int argc, char *argv[] ) { char *dir; DIR *dp; struct dirent *entry; struct stat statbuf; if(argc<2){ dir = getenv("PWD"); }else{ dir = argv[1]; } if(( dp = opendir(dir) ) == NULL ){ perror("opendir"); exit( EXIT_FAILURE ); } while((entry = readdir(dp)) != NULL){ stat(entry->d_name, &statbuf); if(S_ISDIR(statbuf.st_mode)){ fprintf(stdout, "%s/\n", entry->d_name); }else{ fprintf(stdout, "%s\n", entry->d_name); } } closedir(dp); return(0); } 参考サイトを参考にこちらのプログラムを見つけ、コンパイルしました。しかし、dirent.hがincludeできませんでした。問題は何かあるのでしょうか? 作業環境は osがwindowsで、visualstudioでコンパイルしています。