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