2010-11-24 10 views
0

ディレクトリにファイルのリストを取得する必要があるという点で問題があります。今ではほぼ正確に私もそれを望んでどのように動作しますが、問題はそのはまた、彼はファイルでディレクトリをリストアップし、ということであるCのファイル一覧からディレクトリを削除する必要がある

void get_files(int maxfiles) { 
    int count = 0; 
    DIR *dir; 
    struct dirent *ent; 
    dir = opendir(DIRECTORY); 
    if (dir != NULL) { 

     /* get all the files and directories within directory */ 
     while ((ent = readdir(dir)) != NULL) { 
      if (count++ > maxfiles) break; 

      printf("%s\n", ent->d_name); 
     } 
     closedir(dir); 
    } else { 
     /* could not open directory */ 
     printf("ERROR: Could not open directory"); 
     exit(EXIT_FAILURE); 
    } 
} 

:ベースとしてこのprevious StackOverflow questionを使用して、私は現在、このコードを持っています私はファイルのエントリだけが必要です。これを行うための簡単な変更はありますか?

答えて

3

あなたのstruct direntが広く利用できる標準的でない - しかし、d_typeメンバーが含まれている場合は、ディレクトリを除外するためにこれを使用することができ this one

2

POSIXファイルがディレクトリであるかどうかを確認する目的のために使用することができるfstatを定義します。また、チェックを簡素化するマクロもあります。 WindowsのためにあなたがここでのWindows APIを使用する必要があること
http://linux.die.net/man/2/fstat
は注意してください。

+0

恐怖症ではありません。 'fstat'もWindows上で動作します。 – Gabe

0

のようなコードを使用してディレクトリを絞り込むことができます。使用するオプションがあり、そうでないシステムではstatに落ちるだけです.statではなくd_typeを使用すると、ディレクトリリストが数十倍または数百倍速くなる可能性があります。

関連する問題