【问题标题】:Clear directory in standard C++ (cross-platform)标准 C++ 中的清除目录(跨平台)
【发布时间】:2016-03-14 19:52:30
【问题描述】:

我的目标很简单:我想以跨平台方式在给定路径的情况下清除目录(删除其中包含的所有子目录和文件,但不删除目录本身)。

我在网上找到的大多数解决方案都涉及使用 dirent.h,据我了解,这是非标准的,可能不适用于非 POSIX 系统(尤其是 Windows)或使用 Boost.Filesystem。但是,如果我只想清除一个目录,那么构建 Boost 并将其包含在我的项目中需要很多。

有没有办法在标准 C++ 中实现我的目标?或者,标准还没有发展到这一步?

【问题讨论】:

  • “构建 Boost 并将其包含在我的项目中需要很多” - 不,不是。
  • 到目前为止,标准 C++ 中还没有它。但是,由于实际上有两个选项 - 使用 readdir 的 Posix,或者使用 FindFirstFile/FindNextFile 的 Windows,我想说,你的情况并不那么可怕。只需使用#ifdef 来选择一个或另一个。
  • @SergeyA:这仅涵盖 POSIX 和 Windows。世界上有很多非 POSIX、非 Windows 的计算机——并不是每台计算机都是主流的桌面商品 PC!
  • @BarryTheHatchet,实际上还是理论上?
  • @SergeyA:两者都有。理论模拟现实(否则它不会有太大用处)

标签: c++ filesystems


【解决方案1】:

文件系统库已在“文件系统 TS”中“添加”到 C++ 中,因此您可以在编译器的标准库实现中找到实验性实现。

但是,它还不是任何正式标准的一部分。我的理解是它将成为 C++17 的一部分。

在此之前,Boost 它是——或者您自己在既不符合 Windows 也不符合 POSIX 的系统上手工编写的代码。

【讨论】:

  • 甚至一些 C++11 特性还没有完全实现,C++17 也需要他的时间才能成熟。我敢打赌,Boost 文件系统很容易在 2020 年之前保持相关性。
  • @Youka:哦,当然。
  • 好吧,您的答案与您的 cmets 并不相符。声称您使用非 Posix、非 Windows 系统并建议使用 boost 是一个非常奇怪的选择 - boost 本身仅适用于 Posix 或 Windows。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多