我在我的应用程序中使用 glib,我看到 glib 中有用于Cremove
和. 但是这些一次只能处理一个文件或目录。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);
显然,一旦遇到致命错误,我会构建一些错误处理等以中止该过程。