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

问题描述 投票:0回答:1

传统的 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 中的错误还是故意行为?这种行为的原因是否记录在某处?

c++ c++17 std-filesystem
1个回答
0
投票

使用

std::filesystem::path::parent_path
,结果基于传递给
std::filesystem::path
的值。这个函数只是做一些简单的解析,并不解析任何路径。

正如

documentation

 所描述的那样,
Globaly std::filesystem::path 是路径的表示。如果您不想具有与
dirname
相同的行为,则需要寻找
std::filesystem
命名空间中可用的其他函数并构建您自己的自定义工具。

© www.soinside.com 2019 - 2024. All rights reserved.