传统的 Unix shell 实用程序
dirname
查找包含给定文件的目录的名称。如果您想在同一目录中查找其他姐妹文件,这非常有用。以下是一些例子:
$ dirname /some/dir/filename
/some/dir
$ dirname dirname/filename
dirname
$ dirname filename
.
新的 C++ std::filesystem 的
parent_path()
最后一个错误(或者看起来是这样):
#include <filesystem>
#include <iostream>
int main() {
std::cout << "parent of filename: " <<
std::filesystem::path("filename").parent_path() << '\n';
}
输出:
parent of filename: ""
返回空字符串而不是“。”不仅与传统的
dirname
不同,在想要在此父级上添加“/...”以创建姐妹文件名称的代码中使用时也是错误的 - 这会导致错误的“/sister” ”而不是预期的“./妹妹”。
这是 std::filesystem 中的错误还是故意行为?这种行为的原因是否记录在某处?
使用
std::filesystem::path::parent_path
,结果基于传递给 std::filesystem::path
的值。这个函数只是做一些简单的解析,并不解析任何路径。
正如 documentation
所描述的那样,Globaly
std::filesystem::path
是路径的表示。如果您不想具有与 dirname
相同的行为,则需要寻找 std::filesystem
命名空间中可用的其他函数并构建您自己的自定义工具。