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/../bb)、拼接、分解等。

  • 构造方式灵活: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


相关推荐: 《淘宝联盟》推广自己的店铺方法  《广发易淘金》国债逆回购操作教程  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  J*aScript对象中深度嵌套URL键的查找与更新策略  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  J*aScript字符串_Unicode处理  AO3中文入口稳定分享_AO3官网HTTPS看文详解  如何在CSS中使用absolute实现登录弹窗居中_transform translate结合  Magento 2 产品保存事件中安全更新属性的最佳实践  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  composer licenses 命令:如何检查项目依赖的许可证?  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  《小黑盒》删除历史浏览方法  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  掌握产品代码正则表达式:避免常见陷阱与精确匹配  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  如何在CSS中使用伪类选择器_hover实现悬停效果  Git命令与VS Code UI操作的对应关系解析  Eclipse开发J*a快速入门  qq音乐官方网站入口_qq音乐在线听歌网页版链接  PDF如何批量加注释_PDF多文件批注高亮操作教程  Go反射进阶:访问内嵌结构体中的被遮蔽方法  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  C++ switch case字符串_C++如何实现字符串switch匹配  《猎聘》筛选猎头岗位方法  LINUX怎么查看显卡信息_LINUX查看GPU状态  QQ网页版入口导航 QQ网页版在线访问通道  Pandas中基于动态偏移量实现DataFrame列值位移的策略  Win11如何分屏操作_Win11多窗口分屏技巧  《健康大兴》注册方法介绍  附近酒吧怎么找?  163邮箱网页版官方登录入口 163邮箱网页版访问页面  《律学法考》查看学习数据方法  2025考研成绩查询时间入口分享  教资成绩怎么查询  《下一站江湖2》心法融合技巧  《米姆米姆哈》米姆获取及技能攻略  mysql中如何配置字符集和排序规则_mysql字符集排序配置  以下哪一项是古代兵书三十六计中的计谋  国际经济与贸易就业方向解析  《腾讯相册管家》注销账号方法  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  Dash应用多值文本输入处理与类型转换教程  Dagster资产间数据传递与用户配置管理教程  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  人教版电子教材在线获取指南  Django模型动态关联检查:高效管理复杂关系  Composer reinstall命令重装损坏的包 

 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.