std::filesystem 的parent_path() 对于当前目录中的文件是错误的?

Nad*_*'El 7 c++ c++17 std-filesystem

传统的 Unix shell 实用程序dirname查找包含给定文件的目录的名称。如果您想在同一目录中查找其他姐妹文件,这非常有用。这里有一些例子:

$ dirname /some/dir/filename
/some/dir
$ dirname dirname/filename  
dirname
$ dirname filename
.
Run Code Online (Sandbox Code Playgroud)

新的 C++ std::filesystem 的parent_path()最后一个错误(或者看起来是这样):

$ dirname /some/dir/filename
/some/dir
$ dirname dirname/filename  
dirname
$ dirname filename
.
Run Code Online (Sandbox Code Playgroud)

输出:

parent of filename: ""
Run Code Online (Sandbox Code Playgroud)

返回空字符串而不是“.” 不仅与传统的不同dirname,当在想要在此父级上添加“/...”以创建姐妹文件的名称的代码中使用时也是错误的 - 这会导致错误的“/sister”而不是预期为“./妹妹”。

这是 std::filesystem 中的错误还是故意行为?这种行为的原因是否记录在某处?

Wei*_*hou 5

我不会与你争论这是否正确,但如果你总是使用std::filesystem::operator/而不是进行字符串操作,我不知道你将如何遇到你在问题中提到的问题。

特别是,std::filesystem::path("filename").parent_path()/std::filesystem::path("filename")给你 just "filename", not "/filename"。我相信这就是 API 应该使用的方式。

  • `operator/` 的 RHS 可以是一个简单的字符串文字,无需先从中创建一个 `path` 实例:https://en.cppreference.com/w/cpp/filesystem/path/append。 (2认同)