今天拿起手要用C++写个小工具,从指定的目录递归遍历文件,然后做一下处理。又翻了一下boost的filesystem库。小结一下,希望能加深印象,免得下次又要查看文档。
1. path对象就是一个跨平台的路径对象。有许多方法访问路径的各个部分,也用它的iterator迭代路径中的各个部分;
path构造目录结构的时候使用“/”运算符,非常直观。
比如path p1;
path p2 = p1/"something"; p1 /= "xxx.xxx";
2. filesystem名字空间一下有一些全局的函数,比如exists可以判断path是不是存在,is_directory函数判断是不是目录,file_size获得大小--该大小是一个夸平台的类型,可以表示32位或者64的大小;
其他is方法还有:
is_empty
is_other
is_regular_file
is_symlink
3. 最方便的一个功能是遍历path里的所有内容。directory_iterator。
path p;
directory_iterator(p)就是迭代器的起点,无参数的directory_iterator()就是迭代器的终点。
还可以递归迭代,把上面的directory_iterator换成recursive_directory_iterator即可。
4. 创建目录。这里特别要提到一个方法是bool create_directories(const path& p); 如果p是一个目录(也就是is_diretory返回true)。它会递归的创建整个目录结构,免去自己一个一个创建的烦恼了。
其他创建方法还有:
create_directories
create_directory
create_hard_link
create_symlink
5. 还可以复制目录
copy_directory
copy_file
copy_symlink
注意:复制文件的方法copy_file方法在Xcode使用LLVM库的情况下连接的时候会报错,没有找到符号。可以直接用copy方法,该方法自己判断各种情况自动调用对应的方法(比如符号连接,目录,或者普通文件)。
6. 删除remove 递归删除remove_all
7. 改名字rename
8. 如果包含了<boost/filesystem/fstream.hpp>的话,还可以让fstream接受path作为参数。
BTW,使用filesystem需要编译boost,现在版本只要执行一个脚本就能编译完成了,比以前方便多了。
不过,还是要提一下Xcode环境下使用的话,要选择GCC C++ standard library。
GCC的哭虽然没有LLVM 的库先进(我是说支持C++11方面),不过,大部分的C++11标准还是支持的。
目前发现是GCC的库没有std::regex。不过,既然用boost的话那就用boost的regex好了。反正std的也是从boost拿过来而已。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2013-09-04 MFC的规则DLL中资源使用的问题
2013-09-04 不要在公共接口中传递STL容器
2013-09-04 STL跨DLL使用
2013-09-04 STL 跨模块 调用 异常 解决
2013-09-04 DLL中传递STL参数,vector对象作为dll参数传递等问题(转)