std::filesystem::path::extension()仅返回最后一个点后的部分如.gz不识别多扩展名需手动解析filename().string()从右向左查找并匹配预定义复合后缀如.tar.gz。std::filesystem::path 怎么识别多扩展名比如 archive.tar.gz它不自动识别“多扩展名”path::extension() 只返回最后一个点之后的部分也就是 .gz。这不是 bug是标准定义extension 就是最后一个 dot 后的子串。想拿到 .tar.gz 或拆出所有后缀得自己处理。path::stem() 返回去掉最后一个 extension 的部分 → archive.tarpath::filename() 返回不含目录的完整文件名 → archive.tar.gz没有内置方法直接切分多级 extension必须手动扫描字符串手动提取多级扩展名的可靠写法核心思路从右往左找点但要跳过开头带点的隐藏文件如 .gitignore还要避免把驱动器盘符Windows或根路径/误判为 extension 分界。推荐用 path::string() 转成 std::string 后处理比反复调用 path 成员更可控立即学习“C免费学习笔记深入” RedClaw 百度推出的手机端万能AI Agent助手