我在我的应用程序中使用了glib,并且我发现glib中有方便的包装器来使用C语言的
据我所知,C标准和glib都没有包括任何递归目录遍历功能。也没有看到任何特定的方法来一次性删除整个目录树,就像
对于我的工作,我不担心任何复杂情况,例如权限、符号链接回到树上(无限递归)或任何会排除非常天真实现的东西……因此,我不反对编写自己的函数来实现它。
然而,我很好奇这种功能是否已经存在于标准库gtk或glib(或其他易于重用的C库)中,而我只是还没有找到它。在谷歌上搜索这个话题会产生很多误导。
否则,我的计划是使用这种类型的算法:
remove
、unlink
和rmdir
。但是这些仅适用于单个文件或目录。据我所知,C标准和glib都没有包括任何递归目录遍历功能。也没有看到任何特定的方法来一次性删除整个目录树,就像
rm -rf
一样。对于我的工作,我不担心任何复杂情况,例如权限、符号链接回到树上(无限递归)或任何会排除非常天真实现的东西……因此,我不反对编写自己的函数来实现它。
然而,我很好奇这种功能是否已经存在于标准库gtk或glib(或其他易于重用的C库)中,而我只是还没有找到它。在谷歌上搜索这个话题会产生很多误导。
否则,我的计划是使用这种类型的算法:
dir_walk(char* path, void* callback(char*) {
if(is_dir(path) && has_entries(path)) {
entries = get_entries(path);
for(entry in intries) { dir_walk(entry, callback); }
}
else { callback(path) }
}
dir_walk("/home/user/trash", remove);
显然,我会建立一些错误处理机制等来在遇到致命错误时立即中止该过程。
remove()
是 C 标准中的函数,另外两个是 POSIX :) - Matt Joiner