Boost filesystem 使用小筆記

2021-09-06 18:00:06 字數 1642 閱讀 1778

今天拿起手要用c++寫個小工具,從指定的目錄遞迴遍歷檔案,然後做一下處理。又翻了一下boost的filesystem庫。小結一下,希望能加深印象,免得下次又要檢視文件。

1. path物件就是乙個跨平台的路徑物件。有許多方法訪問路徑的各個部分,也用它的iterator迭代路徑中的各個部分; 

path構造目錄結構的時候使用「/」運算子,非常直觀。 

比如path p1; 

path p2 = p1/"something"; p1 /= "***.***"; 

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. 如果包含了的話,還可以讓fstream接受path作為引數。

btw,使用filesystem需要編譯boost,現在版本只要執行乙個指令碼就能編譯完成了,比以前方便多了。 

不過,還是要提一下xcode環境下使用的話,要選擇gcc c++ standard library。 

gcc的哭雖然沒有llvm 的庫先進(我是說支援c++11方面),不過,大部分的c++11標準還是支援的。

目前發現是gcc的庫沒有std::regex。不過,既然用boost的話那就用boost的regex好了。反正std的也是從boost拿過來而已。

使用小企鵝五筆單字輸入模式

出於保護視力的需要,我在學習與工作中使用五筆輸入法來盲打中文,從而可以有效地減少眼睛看螢幕的時間。例如,我每週將手寫日記整理到電腦上的時候,一般都是只看著平時隨身攜帶的日記本,一氣呵成地將一段文字錄入完畢後再統一核對 修改。為了減少盲打時的重位元速率,我都是將輸入法自帶的詞庫禁用,只使用單字輸入模式...

Resource和 Autowired小筆記

resource註解由jdk提供。resource有兩個常用的屬性name和type。a 同時指定name type,那麼會先通過name查詢唯一的bean,找不到就拋異常 如果type與型別不一致,也會拋異常。b 指定name 通過name查詢唯一的bean,找不到就拋異常 c 指定type 通過...

測試小栗子,杯子與筆

測試專案 杯子 需求測試 檢視杯子使用說明書 介面測試 檢視杯子外觀 功能度 用水杯裝水看漏不漏 水能不能被喝到 安全性 杯子有沒有毒或細菌 抗破壞性 杯子從不同高度落下的損壞程度 可移植性 杯子再不同的地方 溫度等環境下是否都可以正常使用 相容性 杯子是否能夠容納果汁 白水 酒精 汽油等 易用性 ...