博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Boost::filesystem 使用小笔记
阅读量:7107 次
发布时间:2019-06-28

本文共 1446 字,大约阅读时间需要 4 分钟。

hot3.png

今天拿起手要用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拿过来而已。

【2015年1月8日更新】

升级Xcode到5.0和6.0之后编译一直有链接错误,不好用了,待考察。

[版权所有,转载请注明出处]

本文同时发表在http://blog.csdn.net/dourgulf/article/details/8589207

转载于:https://my.oschina.net/dourgulf/blog/109066

你可能感兴趣的文章
转apk打包
查看>>
missing blocks错误
查看>>
realm数据库使用
查看>>
说说qwerty、dvorak、colemak三种键盘布局
查看>>
3、centos6.*与centos7.*防火墙操作命令
查看>>
Java-函数式编程(三)流(Stream)
查看>>
Android实例-Delphi开发蓝牙官方实例解析(XE10+小米2+小米5)
查看>>
客户端测试
查看>>
Spring与MyBatis结合使用
查看>>
Linux内核分析第三周学习总结
查看>>
Python字符串
查看>>
spring cloud学习(五)断路器 Hystrix
查看>>
configure: error: C preprocessor "arm-linux-gnueabihf-g++" fails sanity check
查看>>
Android简单的monkey测试
查看>>
面向对象编程(封装、封装的意义、封装与扩展性、@property)
查看>>
教你如何分辨用户是用手机还是电脑访问你的网站
查看>>
[原]iOS7.1获取图库所有照片的方法封装
查看>>
[转]Linux下scp的用法
查看>>
[leetcode-532-K-diff Pairs in an Array]
查看>>
iTextSharp 生成PDF
查看>>