-2

ファイルを検索するフォルダーを再帰的にスキャンする、Linux で実行される C プログラムを作成する必要があります。これは可能ですか?私はCの初心者で、これまでのところ何も見つかりませんでした。誰でも私を助けてもらえますか?

4

1 に答える 1

2

Glib を見ることができます。ここで役立つファイル ユーティリティがいくつかあります。

具体的には、ディレクトリ内のすべてのファイルに対して g_dir_open関数を使用できます。この関数がGError**errorポインターを null 以外に設定する場合は、ファイルを開こうとしています。それ以外の場合は、サブディレクトリに解析しただけです...

コードは次のようになります。

void parse(const gchar *path)
{
  GError *error;
  GDir *dir = g_dir_open(path, 0, error);
  if(error) 
  {
    // this is a file, not a dir, or a dir which could not be opened...
    // you can put all the processing for your file here.
  }
  else
  {
    gchar *elem;
    while(( elem=g_dir_read_name(dir) ))
    {
      parse(elem);
      free(elem);
    }
    g_dir_close(dir);
  }
}

10 個のファイルのフォルダーがあるとします。その場合、解析関数はファイルごとに 1 回、10 回自身を呼び出します。(デバッガーで試してみてください!)
0 回目の解析呼び出し:ディレクトリを開き、while ループに到達し、最初のファイルに対して初めて
parse を呼び出します。 if ブロックの一部。
0 番目の解析呼び出しに戻る: while ループを繰り返し、次のファイルのために 2 回目の解析を呼び出します。2 回目の
解析呼び出し:ファイルをディレクトリとして開くことができないため、関数は if ブロックの最初の部分で終了します。
0 番目の解析呼び出しに戻ります: while ループを繰り返し、次のファイルの 3 回目の解析を呼び出します
...
0 番目の解析呼び出しに戻ります:ディレクトリにファイルがなくなると、ループが終了します。

これは再帰と呼ばれます。

于 2012-12-14T15:43:54.270 に答える