c++的std::filesystem库怎么用 跨平台的文件和目录操作【详解】


std::filesystem 是 C++17 引入的跨平台文件系统库,核心为 path 类,支持路径操作、属性查询、目录遍历及文件管理,统一替代系统 API。

c++的std::filesystem库怎么用 跨平台的文件和目录操作【详解】

std::filesystem 是 C++17 引入的标准库组件,用于跨平台地处理文件路径、查询文件属性、遍历目录、创建/删除/重命名文件和目录等。它替代了过去依赖系统 API(如 Windows 的 Win32 或 POSIX 的 stat/opendir)的繁琐写法,统一用一套接口适配 Linux、macOS、Windows 等主流系统。

基础类型:path 是核心

std::filesystem::path 是整个库的基石,不是字符串,而是一个智能路径封装类,能自动处理不同系统的路径分隔符(/ vs \)、规范化路径(如 ./a/../b → b)、拼接、分解等。

  • 构造方式灵活:fs::path p = "data/log.txt";、fs::path p("config");、fs::path p = fs::current_path() / "cache" / "temp.bin";
  • 常用成员:p.filename()、p.parent_path()、p.extension()、p.has_extension()、p.is_absolute()
  • 转字符串时注意:p.string() 返回本地编码(如 Windows 上是 UTF-8 或窄字符,取决于编译设置),推荐用 p.generic_string() 获取标准化斜杠的字符串(适合日志或调试)

判断与查询:exists、status、file_size 等

用 fs::exists(p) 判断路径是否存在;用 fs::status(p) 获取详细类型和权限信息;再结合 fs::is_regular_file()、fs::is_directory()、fs::is_symlink() 精确识别。

  • 检查是否为普通文件并获取大小:if (fs::is_regular_file(p)) size_t s = fs::file_size(p);
  • 获取最后修改时间:auto t = fs::last_write_time(p); 返回 fs::file_time_type,可转为 std::chrono::time_point 处理
  • 注意:某些操作(如读取时间或大小)在文件被其他进程独占打开时可能抛出 fs::filesystem_error,建议用 try-catch 包裹

目录遍历:recursive_directory_iterator 最常用

遍历一个目录下的所有项(含子目录)推荐用 fs::recursive_directory_iterator;只遍历当前层用 fs::directory_iterator。

西语写作助手 西语写作助手

西语助手旗下的AI智能写作平台,支持西语语法纠错润色、论文批改写作

西语写作助手 21 查看详情 西语写作助手
  • 简单递归遍历:for (const auto& entry : fs::recursive_directory_iterator("/home/user")) { std::cout
  • 跳过符号链接(避免循环):fs::recursive_directory_iterator(p, fs::directory_options::skip_permission_denied)
  • entry 是 fs::directory_entry 类型,调用 entry.path()、entry.is_directory()、entry.file_size() 等方法获取信息

增删改操作:create_directories、remove、rename

创建目录支持多级(类似 shell 的 mkdir -p),删除支持单个文件/空目录,或递归删除非空目录;重命名可跨分区(底层自动复制+删除)。

  • 创建完整路径:fs::create_directories("a/b/c/d"); —— 自动创建 a、a/b、a/b/c
  • 删除文件或空目录:fs::remove(p);;强制递归删除:fs::remove_all(p);
  • 移动/重命名:fs::rename("old.txt", "new.txt");;也可用于移动到另一目录:fs::rename("src/file.dat", "dst/file.dat");
  • 注意:这些操作都可能失败(权限不足、路径被占用、磁盘满等),务必检查返回值或捕获异常

编译与兼容性提醒

启用 std::filesystem 需要:C++17 或更高标准 + 链接对应系统库。

  • g++/Clang:加 -std=c++17(或 c++20),Linux/macOS 还需链接 -lstdc++fs(GCC 9+ 可能不再需要);Clang 通常需 -lc++fs
  • MSVC(Visual Studio 2017+):默认支持,无需额外链接,但确保项目设置为 C++17 或以上
  • 不支持 C++14 或更早版本;若需兼容旧标准,可用 boost::filesystem 作为替代

以上就是c++++的std::filesystem库怎么用 跨平台的文件和目录操作【详解】的详细内容,更多请关注其它相关文章!


# 如何使用  # 泰安seo排名工具  # seo三人行  # 公司网站推广就选火1星  # 醴陵留学机构网站推广  # 宁河区seo网络优化师  # 营口建设银行网站  # 正规网站建设管理  # 网站建设如何做企业网站制作  # 市场营销5g推广是什么  # 海外网站建设与推广  # 相关文章  # 也可  # 客户端  # 创建一个  # linux  # 重命名  # 网络编程  # 如何用  # 遍历  # 递归  # 标准库  # cos  # win  # macos  # c++  # mac  # 编码  # windows 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: Python模块化编程:避免循环导入与共享函数的最佳实践  c++如何使用std::thread::join和detach_c++线程生命周期管理  使用AI在VS Code中将代码从一种语言翻译成另一种  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  被称为海蜈蚣的海洋动物是  如何在CSS中使用absolute实现登录弹窗居中_transform translate结合  《浙里办》电子发票开具方法  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  《绝区零》2.3前瞻|直播|内容介绍  poki官网最新入口 poki小游戏大全入口  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  VS Code快捷键when上下文子句的妙用  小红书如何引流到私信?引流到私信有用吗?  sf漫画官网登录入口直达_sf漫画官方正版网址  圆通快递官网入口查询单号 手机版官方查询入口  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  抖音号升级成企业资质怎么弄?有什么好处?  小米倒班助手添加日历提醒  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  在Dash应用中自定义HTML标题和网站图标  《i莞家》修改昵称方法  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  PHP安全加载非公开目录图片与动态内容类型处理指南  圆通快递官方入口不需要登录 在线查询入口快速查询  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  《淘宝联盟》推广自己的店铺方法  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  《波斯王子:失落的王冠》剑术大师打法攻略  《百度畅听版》关闭兴趣推荐方法  C++二维数组动态分配方法_C++指针与数组内存布局  Animex动漫社社登录官网 Animex动漫社资源社入口直达  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  苹果自助维修计划支持哪些设备机型  mysql如何限制远程访问_mysql远程访问限制方法  C++如何实现单例模式_C++线程安全的单例模式写法  微博网页版入口链接 微博网页版在线互动平台  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  《兴业银行》注册登录方法  我的世界官方网址入口 我的世界游戏主页直达入口  口腔诊所管理软件推荐 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.