【发布时间】:2018-01-12 15:43:07
【问题描述】:
函数boost::filesystem::canonical() (doc of 1.66, doc of current release) 提供两个参数(忽略错误代码重载)base。第一个是规范化的路径,第二个参数是基本路径,如果它是相对的,则用于使第一个路径成为绝对路径。默认情况下,current_path() 用于此参数。
Boost 1.60 引入了一些新功能,其中包括boost::filesystem::weakly_canonical() (doc of 1.66, doc of current release)。此函数缺少第二个参数。标准化 (C++17) 变体 std::filesystem::canonical() 和 std::filesystem::weakly_canonical() 也是如此(请参阅 cppreference)。
我想将canonical() 与weakly_canonical() 交换,但我使用了第二个参数。这就是我意识到这个论点被删除的方式。现在我想知道为什么它被删除了,以及如何让路径成为绝对路径。
我发现了一个defect report,它暗示了this resolution for C++17,但坦率地说,我真的不明白其中的原因。我会很高兴有一个解释,或者更好的例子,其中 base 的重载会被过度指定。
当然我想知道我应该如何使用不是当前目录的基本目录将相对路径转换为绝对路径。我是否应该像cppreference for std::filesystem::absolute() 上的提示那样简单地使用base / p,因为我知道这是我的目标系统(带有Visual C++ 的Windows)上的正确形式?
【问题讨论】:
标签: c++ boost c++17 boost-filesystem std-filesystem