【问题标题】:C++ experimental/filesystem remove_allC++ 实验/文件系统 remove_all
【发布时间】:2017-04-29 17:21:15
【问题描述】:

我想在 C++17 中删除带有子文件夹和文件的文件夹。我正在使用experimental/filesystem

namespace filesys = std::experimental::filesystem;
...

uintmax_t n = filesys::remove_all("tmp");
cout << "Deleted " << n << " files or directories\n";

但是当我运行这段代码时,程序抛出异常

在抛出 'std::experimental::filesystem::v1::__cxx11::filesystem_error' 的实例后调用终止

what(): filesystem error: cannot remove all: Directory not empty [tmp]

中止

使用编译器 g++ 5.4.0

文档说:

递归删除 p 的内容(如果它是一个目录)及其所有子目录的内容,然后删除 p 本身,就像通过重复应用 POSIX 删除一样。不遵循符号链接(删除符号链接,而不是其目标)

我的代码有问题吗?

【问题讨论】:

  • tmp 在哪里?你在哪里运行可执行文件?否则需要指定完整路径
  • experimental 不是来自 C++ 标准,而是来自一些单独的技术规范。在 C++17 中,您只需使用 std::filesystem::remove_all
  • deW1: tmp 与程序在同一个文件夹中...我用 tmp 文件创建了文件夹,然后我想要清理
  • 让我猜猜:windows操作系统?
  • 只有当我尝试删除带有子文件夹的文件夹时才会出现问题。有文件的文件夹没问题

标签: c++


【解决方案1】:

抛出此错误的情况可能是 gcc 5.4 实现中的一个问题: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71313

使用更新版本的 gcc 不会抛出这样的错误。例如,对于 gcc 7.4.0 上的空 remove_all 调用,不会抛出此错误。

【讨论】:

  • 我可以在这里确认这是一个 gcc 版本问题。在 5.4.0 上也发生在我身上。对 7.4.0 编译代码的相同调用不会遇到此问题。所以使用升级的 gcc 版本应该会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2012-08-22
  • 1970-01-01
  • 2011-04-02
相关资源
最近更新 更多