文件夹树C的递归扫描

时间:2012-12-14 12:36:20

标签: c

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

1 个答案:

答案 0 :(得分:2)

你可以看一下Glib,这里有一些file utilities可以提供帮助。

更具体地说,您可以对目录中的每个文件使用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个文件的文件夹,那么解析函数将自动调用10次,每个文件一次。 (只需在调试器中试一试!)
第0次解析调用:打开目录,然后到达while循环并调用第一次解析第一个文件
第一次解析调用:无法将文件作为目录打开,因此该函数在if块的第一部分结束。
回到第0次解析调用:迭代while循环,调用第二次解析下一个文件
第二次解析调用:无法将文件作为目录打开,因此该函数在if块的第一部分结束。
回到第0次解析调用:迭代while循环,调用第3次解析下一个文件
...
回到第0次解析调用: dir中没有更多文件,循环结束。

这称为递归。