c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】

张开发
2026/4/21 0:45:26 15 分钟阅读

分享文章

c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
std::filesystem::replace_extension 仅修改路径对象的逻辑表示不更改磁盘文件真正改后缀需配合 fs::rename且须检查目标是否存在、文件是否为常规文件并注意跨卷、文件占用等系统限制。std::filesystem::replace_extension 为什么改不了后缀它只修改路径对象的逻辑表示不碰磁盘上的文件——这是最常被误解的一点。调用 replace_extension 后得到的是一个新路径字符串原文件名没变更不会重命名文件。常见错误现象fs::path p a.txt; p.replace_extension(.log); 执行完 p 变成 a.log但磁盘上仍是 a.txt正确做法必须配合 fs::rename 才能真正改后缀注意 replace_extension 会先移除原有扩展名包括点再拼接新扩展名传入空字符串或 会删掉扩展名传入 log 和 .log 效果一样批量重命名文件后缀的最小可靠写法核心就三步遍历、构造新路径、调用 rename。别绕弯也别用 system(ren ...) 这类平台依赖操作。使用场景当前目录下所有 .txt 改成 .log跳过子目录必须检查目标路径是否已存在否则 rename 抛 fs::filesystem_error建议用 fs::is_regular_file 过滤避免把目录或符号链接当文件处理示例片段for (const auto entry : fs::directory_iterator(.)) { if (fs::is_regular_file(entry) entry.path().extension() .txt) { fs::path new_path entry.path(); new_path.replace_extension(.log); if (!fs::exists(new_path)) { fs::rename(entry.path(), new_path); } }}Windows 下 rename 失败的几个硬坑不是代码写错了而是系统级限制在卡你。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章