今天拿起手要用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。spa
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 .net
copy_symlinkcode
注意:复制文件的方法copy_file方法在Xcode使用LLVM库的状况下链接的时候会报错,没有找到符号。能够直接用copy方法,该方法本身判断各类状况自动调用对应的方法(好比符号链接,目录,或者普通文件)。对象
6. 删除remove 递归删除remove_all递归
7. 更名字renamerem
8. 若是包含了<boost/filesystem/fstream.hpp>的话,还可让fstream接受path做为参数。文档
BTW,使用filesystem须要编译boost,如今版本只要执行一个脚本就能编译完成了,比之前方便多了。
不过,仍是要提一下Xcode环境下使用的话,要选择GCC C++ standard library。 get
GCC的哭虽然没有LLVM 的库先进(我是说支持C++11方面),不过,大部分的C++11标准仍是支持的。
目前发现是GCC的库没有std::regex。不过,既然用boost的话那就用boost的regex好了。反正std的也是从boost拿过来而已。