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)。
答案 0 :(得分:1)
这是合理的行为,因为虽然你是对的,test
和./test
通常指的是同一件事,但在所有地方都不是这样。
例如,如果在shell中运行./test
作为命令,它将始终在当前目录中查找该程序,而不是其他地方。但是如果你运行test
,它将会在运行时路径(例如$PATH
)中查找。
因此,test
和./test
是否引用同一文件实际上是依赖于上下文的 - 因此./
不是多余的。