我需要创建一个在 linux 上运行的 C 程序,它递归地扫描文件夹搜索文件。这可能吗?我是 C 的初学者,到目前为止我找不到任何东西。谁能帮帮我吗?
问问题
742 次
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 回答