我需要创建一个在linux上运行的C程序,它递归扫描搜索文件的文件夹。这可能吗?我是C的初学者,到目前为止我找不到任何东西。有人可以帮帮我吗?
答案 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中没有更多文件,循环结束。
这称为递归。