当前位置: 首页 > article >正文

[原创](Modern C++)现代C++的关键性概念: 文件系统标准库<filesystem>真心好用.

[作者]
常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
随着C++17标准的推出, 其中<filesystem>库无疑是最受欢迎的一项. 过去在处理文件路径拼接、目录遍历等操作时常常需要依赖第三方库或者编写大量平台相关的代码. 而如今, std::filesystem不仅提供了统一的API来处理文件和目录操作, 还能自动管理不同平台的路径分隔符, 让代码更简洁、易读且具有更好的可移植性.

[代码演示]

int main()
{

	// 定义根路径,这里以 Windows 平台的 D 盘为例
	std::filesystem::path path_Root{ "D:\\" };

	// 使用追加运算符(/))来拼接路径, 无需担心平台之间的路径分隔符差异
	std::filesystem::path path_Full{ path_Root / "debug_tools" / "x64dbg_64Env" };
	std::cout << path_Full.string().c_str() << std::endl;  // 输出:D:\debug_tools\x64dbg_64Env

	// 使用recursive_directory_iterator遍历目录及其子目录, 非常方便
	try {
		for (const auto& FileFolder_Item : std::filesystem::recursive_directory_iterator(path_Full)) {
			std::cout << FileFolder_Item.path().string().c_str() << std::endl;
		}
	}
	catch (const std::filesystem::filesystem_error& e) {
		std::cerr << "Error: " << e.what() << std::endl;

	}

	return 0;

}

[代码说明]
1. 路径拼接:
   * 使用std::filesystem::path定义了一个根路径path_Root(例如:D:\).
   * 通过追加运算符 / 依次将"debug_tools"和"x64dbg_64Env"拼接到根路径上, 形成一个完整的文件夹路径path_Full. 这种方式可以自动处理路径分隔符, 无论是在Windows还是Linux平台下, 都能保证路径的正确性.

2. 目录遍历:
   * 使用std::filesystem::recursive_directory_iterator对path_Full目录进行递归遍历. 这个迭代器可以自动遍历指定目录下的所有文件和子目录, 非常适合处理文件系统的层级结构.
   * 在遍历过程中, 每一个目录或文件都会被输出. 通过FileFolder_Item.path().string().c_str()获取路径的字符串表示, 方便调试和日志记录.

3. 异常处理:
   * 由于文件系统操作存在权限不足或路径错误等问题, 代码使用try-catch结构捕获std::filesystem::filesystem_error异常, 以便在出现错误时能够及时反馈并处理.
   
[总结]
可以看到<filesystem>库为现代C++提供了极大便利, 跨平台路径处理, 便捷的目录遍历, 健壮的异常处理. 不仅提升了代码的可读性和可移植性, 同时也为开发者带来了更高效、更安全的文件系统操作方式.


http://www.kler.cn/a/548256.html

相关文章:

  • Windows 字体导入到 Docker 指定容器
  • tenda路由器WriteFacMac存在远程命令执行漏洞(CVE-2024-10697)
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-20- 操作鼠标拖拽 - 上篇(详细教程)
  • 盛铂科技SLMF215低相位噪声频率综合器:高精度、便携性与国产化的完美结合
  • 中上211硕对嵌入式AI感兴趣,如何有效规划学习路径?
  • ubuntu /dev/ttyUSB1重命名为/dev/ttyUSB0。
  • IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)
  • CentOS上安装WordPress
  • JMeter工具介绍、元件和组件的介绍
  • 基于大数据的奥运会获奖数据分析系统设计与实现
  • 前端知识速记--css篇:CSS3中的常见动画及实现方式
  • 《AI大模型开发笔记》deepseek提示词技巧
  • 深入指南:在IDEA中启用和使用DeepSeek
  • vue3大模型流式数据滚动效果hooks
  • Linux udp poll函数
  • 自学FOC系列分享--BLDC的电驱
  • GitHub 热点项目介绍
  • 如何判断网页是不是鸿蒙手机浏览器里打开
  • 138,【5】buuctf web [RootersCTF2019]I_<3_Flask
  • 【GPIO】5.理解保护二极管在GPIO过电压保护中的作用