0

DIR、opendir()、および readdir() を使用して現在のディレクトリ内のすべてのファイルを調べ、以下のようにそれらを dirent 構造体に割り当てる C プログラムを作成しています。

int main(int argc, char *argv[])
{
    DIR *d;
    char *dir_name = ".";
    struct stat s;

    d = opendir(dir_name);

    while (1) {
        struct dirent *entry;  

        entry = readdir(d);

        if (!entry) 
            break;

        //how to check if this is a text file before printing?
        printf ("%s\n", entry->d_name);
    }
    closedir(d)
}

調べる必要があるのは、ファイルをテストしてテキスト ファイルかどうかを確認する方法です。モードを調べるために stat() を使用することを考えました。この方法でディレクトリを除外できます。バイナリの場合、実行可能なビットを探すことができると思っていましたが、たとえば実行可能なテキスト ファイルであるスクリプトの場合は問題になります。

プログラムでテキスト ファイルのみをフィルタリングする方法について何か提案はありますか?

4

2 に答える 2

3

libmagic を使用して MIME タイプを調べる

于 2013-04-28T13:01:17.070 に答える
-1

私はlibmagicを機能させることをあきらめ、次のアルゴリズムを使用して、ディレクトリと非ASCII文字を探してファイルの内容をループすることにしました。ここにはおそらくある種の欠陥がありますが、私がテストしたファイルでは機能するようです。

is_text = 1;

while ((r = read(fs, &ch, sizeof(ch))) != 0) {
  if (r < 0) {
    is_text = 0;
    break;
  }
  if (ch < 0) {
    is_text = 0;
    break;
  }
}
于 2013-04-28T21:08:04.873 に答える