我有这段代码
auto path = std::filesystem::path("/root/home/../opt/.");
我尝试使用std::filesystem::absolute()
,但后来意识到它与我想要的结果不同。
我的问题是,如何将那个相对路径转换为绝对路径,使得结果为"/root/opt/"
。
我在Debian g++-9上使用c++17。
我有这段代码
auto path = std::filesystem::path("/root/home/../opt/.");
我尝试使用std::filesystem::absolute()
,但后来意识到它与我想要的结果不同。
我的问题是,如何将那个相对路径转换为绝对路径,使得结果为"/root/opt/"
。
我在Debian g++-9上使用c++17。
使用std::filesystem::canonical
将路径转换为绝对路径并删除所有..
(参考资料):
auto path = std::filesystem::canonical("/root/home/../opt/.");
提供给你:
"/root/opt"
std::cout << std::filesystem::path("/root/home/../opt/.").lexically_normal() << std::endl;
canonical
)不同,lexically_normal
方法不会尝试解析符号链接,实际上根本不执行任何文件系统操作。它只是一个字符串操纵方法,因此得名。根据情况,这可能或可能不是您想要的。 - Arthur Tacca