gpt4 book ai didi

c - 在 glib 或 libc 中是否有与 boost::filesystem::remove_all(path) 类似的功能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:37 25 4
gpt4 key购买 nike

我不能使用 boost,只能使用 glib 和 libc 函数。

如果你检查 glib,你会发现 g_remove、g_rmdir 和 g_unlink,它们都不会删除非空目录。

我看到一些帖子实现了一个函数来递归删除目录中的所有文件和子目录,例如 Linux 命令“rm -rf 路径”。

我更喜欢使用经过良好测试的 C 实现。

您推荐哪种实现/API?

谢谢。

最佳答案

目前 GIO 中没有实现与 rm -rf 等效的东西,但您可以构建一些相当容易实现的东西:

/* Recursively delete @file and its children. @file may be a file or a directory. */
static gboolean
rm_rf (GFile *file,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GFileEnumerator) enumerator = NULL;

enumerator = g_file_enumerate_children (file, G_FILE_ATTRIBUTE_STANDARD_NAME,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
cancellable, NULL);

while (enumerator != NULL)
{
GFile *child;

if (!g_file_enumerator_iterate (enumerator, NULL, &child, cancellable, error))
return FALSE;
if (child == NULL)
break;
if (!rm_rf (child, cancellable, error))
return FALSE;
}

return g_file_delete (file, cancellable, error);
}

注意使用g_autoptr()需要 GLib 2.44 和支持自动清理的编译器(目前,只有 GCC 或 Clang)。 g_file_enumerator_iterate()还需要 GLib 2.44。

关于c - 在 glib 或 libc 中是否有与 boost::filesystem::remove_all(path) 类似的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com