如何用std::filesystem::path在C++中规范化文件路径?
解决方案:使用
std::filesystem::path::lexically_normal() 在Windows平台下,make_preferred()仅负责将路径中的分隔符转换为平台首选的\,但不会合并多个连续的分隔符(不管是/还是\)。要同时实现合并任意数量的混合分隔符为单个默认分隔符,你需要使用std::filesystem::path::lexically_normal()方法,它会执行完整的词法规范化操作,包括:
- 将所有分隔符(
/或\)替换为平台首选的分隔符 - 合并连续的多个分隔符为单个分隔符
- 移除冗余的当前目录标记
. - 解析上级目录标记
..(如果存在)
示例代码
#include <filesystem> #include <iostream> int main() { std::filesystem::path input_path(R"(C:\temp\Recordings/test)"); std::filesystem::path normalized_path = input_path.lexically_normal(); std::cout << "原始路径: " << input_path << std::endl; std::cout << "规范化后路径: " << normalized_path << std::endl; return 0; }
输出结果(Windows VS2019 x64)
原始路径: "C:\temp\Recordings/test" 规范化后路径: "C:\temp\Recordings\test"
注意事项
如果你的路径中包含..(上级目录),lexically_normal()会自动解析这些标记。即使路径中没有这类标记,该方法也能正常完成分隔符合并与转换的需求。
另外,确保项目启用了C17或更高版本(VS2019默认支持),并且正确链接filesystem库:Debug模式需链接vcruntime140d_filesystem.lib,Release模式链接vcruntime140_filesystem.lib,或在项目设置中直接将C语言标准设为C++17及以上。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

