Boost::filesystem 使用小筆記
今天拿起手要用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拿過來而已。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成