You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:55:14