【发布时间】:2017-03-22 13:09:42
【问题描述】:
boost::filesystem::path::lexically_normal() 的文档指出:
返回
*this,删除冗余的当前目录(点)、父目录(点-点)和目录分隔符元素。
请参阅:http://www.boost.org/doc/libs/1_63_0/libs/filesystem/doc/reference.html。
以下打印 ./test(使用 Boost 1.63.0)我期望 test:
#include <boost/filesystem/path.hpp>
#include <iostream>
int main(void)
{
std::cout << boost::filesystem::path{"./test"}.lexically_normal().string() << "\n";
return 0;
}
所以第一个点元素不被认为是多余的。但是,test 和 ./test 在使用 boost 文件系统时显然都解析为同一个文件,所以这对我来说似乎不一致。这是预期的行为吗?
更新:C++17 文件系统库按预期返回"test"(GCC 8.2.0,Linux)。
【问题讨论】:
-
您在这里隐含地假设
test是一个相对路径。这是可移植代码中的一个危险假设。./test无疑是相对的。 -
这是一种 Unix 敏感性。几乎没有结束,植根于
perms的 0777 永远不会很好地移植到非 Unix 操作系统。