-2

我需要创建一个在 linux 上运行的 C 程序,它递归地扫描文件夹搜索文件。这可能吗?我是 C 的初学者,到目前为止我找不到任何东西。谁能帮帮我吗?

4

1 回答 1

2

你可以看看 Glib,这里有一些文件实用程序可以提供帮助。

更具体地说,您可以对目录中的每个文件使用g_dir_open函数。如果这个函数将GError**error指针设置为非空,那么你已经尝试打开一个文件,否则你只是解析到一个子目录......

您的代码应如下所示:

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 个文件的文件夹,那么 parse 函数将调用自身 10 次,每个文件调用一次。(只需在调试器中尝试!)
第 0 次解析调用:打开目录,然后到达 while 循环并调用第 1 次解析第一个文件
第 1 次解析调用:无法将文件作为目录打开,因此函数以第一个结束if 块的一部分。
回到第 0 次 parse 调用:迭代 while 循环,为下一个文件调用第 2
次 parse 第 2 次 parse 调用:无法将文件作为目录打开,因此函数在 if 块的第一部分结束。
返回第 0 次解析调用:迭代 while 循环,调用第 3 次解析下一个文件
……
返回第 0 次解析调用:目录中没有更多文件,循环结束。

这称为递归。

于 2012-12-14T15:43:54.270 回答