boost :: filesystem :: remove_all()和std :: filesystem :: remove_all()在Visual Studio 2017上的行为有所不同

时间:2018-10-18 13:08:17

标签: visual-c++ c++17 boost-filesystem std-filesystem

Microsoft的std::filesystem::remove_all()实施似乎在除去子目录以外的空目录时提供了与原始boost::filesystem::remove_all()不同的返回值。 Boost版本对所有已删除的文件系统对象(即文件目录)进行计数,而MS版本不计算子目录,即使将其删除也是如此。

因此,使用VS2017及其std::experimental::filesystem::v1时,上面链接中显示了示例程序:

#include <iostream>
#include <cstdint>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    fs::path dir = fs::temp_directory_path();
    fs::create_directories(dir / "abcdef/example");
    std::uintmax_t n = fs::remove_all(dir / "abcdef");
    std::cout << "Deleted " << n << " files or directories\n";
}

没有返回官方答案

  

已删除2个文件或目录

但是

  

已删除0个文件或目录

我认为这是由于对specs的误解,因为该函数...

  

返回:已删除文件的数量

也许MS严格将“文件”解释为file_type::regular_file的文件系统对象,而不是遵循definition in the draft,后者明确声明文件为...

  

文件系统中保存用户或系统数据的对象。 [...]文件类型包括常规文件和目录。


问题

这是我应该向Microsoft提出的,还是我自己读错了Standard,还是我首先看到了鬼影,甚至没有人可以重现?

0 个答案:

没有答案