2

ディレクトリに多数あることがわかっている場合に、テキストファイルからデータを読み取って抽出する正しい方法は何ですか?fopen()ファイルへのポインタを取得して、ファイルwhile(fgets(..) != null){}全体から読み取るようなことを行うことができることは知っていますが、別のファイルから読み取るにはどうすればよいですか?ディレクトリ内のすべてのファイルをループしたい。

4

2 に答える 2

2

サム、次の小さな関数のようにopendir/readdirを使用できます。

#include <stdio.h>
#include <dirent.h>

static void scan_dir(const char *dir)
{
    struct dirent * entry;
    DIR *d = opendir( dir );

    if (d == 0) {
        perror("opendir");
        return;
    }

    while ((entry = readdir(d)) != 0) {
        printf("%s\n", entry->d_name);
        //read your file here
    }
    closedir(d);
}


int main(int argc, char ** argv)
{
    scan_dir(argv[1]);
    return 0;
}

これにより、コマンドラインで指定されたディレクトリが開き、そこに含まれるすべてのファイルの名前が出力されます。ただし、名前を印刷する代わりに、ファイルを好きなように処理できます...

于 2012-11-17T02:50:49.013 に答える
1

通常、ファイルのリストはコマンドラインでプログラムに提供されるため、main()に2番目のパラメーターとして渡されるポインターの配列で利用できます。つまり、呼び出し元のシェルを使用してディレクトリ内のすべてのファイルを検索し、プログラムはargv []を繰り返し処理して、各ファイルを開いて処理(および閉じ)します。

p。を参照してください。「TheCProgrammingLanguage」の162、Kernighan and Ritchie、第2版、使用できるコードのほぼ完全なテンプレート。filecopy()この例の関数は、独自の処理に置き換えてください。

プログラムから直接ディレクトリを読み取る必要がある場合は、libcのopendir(3)および関連する関数を確認する必要があります。一部のシステムは、ftw(3)またはfts(3)と呼ばれるライブラリ関数も提供します。これも非常に便利です。

于 2012-11-17T02:46:13.420 に答える