カレントディレクトリ内のファイルの中で指定した拡張子のファイルを全て配列に読み込ませるプログラムを書こうと頑張っています。

しかし、方針がわからず困っています。
方針だけでも良いので教えていただけないでしょうか?

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問する時には、開発&実行環境と、何がわからないのか具体的に記載して下さい。


方針とは何でしょう?
C言語においての配列などの考え方が解らないのか、ディレクトリを取得する方法がわからないのでしょうか?

理論だけ簡単に記載すると…
ディレクトリとは、ファイル目次が書かれた特殊なファイルです。
目的のディレクトリファイルから、ファイル名を読み出して、メモリに格納すれば良いです。
MacやLinuxなら、opendir, readdir この辺の関数で読み出せます。
Winなら、FindFirstFileEx, FindNextFile この辺の関数で読み出せます。
配列に取り込む場合、Winの場合はショートなのかロングなのか、Mac/LinuxならUTFの扱い、など考慮して設計して下さい。

この回答への補足

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

補足日時:2011/04/24 01:58
    • good
    • 0
この回答へのお礼

ありがとうございます。初めて耳にする関数なので参考にさせていただきます。

作業環境は
osがwindowsで、visualstudioでコンパイルしています。

特にディレクトリを取得する方法がわかっていません。

よろしくお願いします。

お礼日時:2011/04/24 01:04

http://q.hatena.ne.jp/1118121349
が参考になるのでは?
printfの代わりに配列に入力するとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

#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でコンパイルしています。

お礼日時:2011/04/24 01:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);

Qfopenでディレクトリ内の全ファイルを順次開く方法

 UNIX上の/home/info/user/log内にある*.logファイルを一つずつfopenで開いて一行ずつ読み込み、用が済んだらfcloseで閉じていくようなプログラムを作りたいのですが、どうすれば良いのでしょうか?
 最初はls -l /home/info/user/log/*.logをリダイレクトしたファイルリストを作り、それを読み込ませてfopen……という流れを考えていたのですが、対象となるファイルが万単位に登る為実現不可でした。
 一行ずつ読み込ませる部分は既に出来ているので、fopen/fcloseに絞ってお教え下さい。

Aベストアンサー

お書きの方法でも別に万のファイルがあっても実現可能だと思いますが、リダイレクト先の一時ファイルを置く場所が足りないのでしょうか?

普通は、opendirして、
(readdirでディレクトリの内容を読み出してファイル名を調べfopen→処理→fclose) を繰り返します。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報