从 std::filesystem::path c++ 中获取绝对路径

11

我有这段代码

auto path = std::filesystem::path("/root/home/../opt/.");

我尝试使用std::filesystem::absolute(),但后来意识到它与我想要的结果不同。

我的问题是,如何将那个相对路径转换为绝对路径,使得结果为"/root/opt/"

我在Debian g++-9上使用c++17。


2
你需要规范路径(链接)。 - f9c69e9781fa194211448473495534
2个回答

15

使用std::filesystem::canonical将路径转换为绝对路径并删除所有..参考资料):

auto path = std::filesystem::canonical("/root/home/../opt/.");

提供给你:

"/root/opt"

7
你也可以使用这个函数。
 std::cout << std::filesystem::path("/root/home/../opt/.").lexically_normal()    << std::endl;

6
值得注意的是:与其他答案(canonical)不同,lexically_normal方法不会尝试解析符号链接,实际上根本不执行任何文件系统操作。它只是一个字符串操纵方法,因此得名。根据情况,这可能或可能不是您想要的。 - Arthur Tacca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接