在boost庫出現之前,c++對於檔案和目錄的操作,大都借助於unix提供的底層檔案和目錄介面。boost中filesystem庫可以跨平台操作目錄、檔案等,在不失效能的情況下,提供了友好的操作方法。
#include
編譯時,需要鏈結
-lboost_filesystem
當安裝路徑不是unix環境變數中設定的標準路徑的話,編譯時還需加上boost庫標頭檔案和動態路路徑,即:
-i $(boost)/include/
-l $(boost)/lib/
變數$(boost)是boost庫實際安裝路徑。
路徑(path類)和迭代器–filesystem操作的基礎
path類提供了路徑操作的豐富介面,可以獲得檔名、拓展名、檔案屬性等。迭代器提供了遍歷整個目錄所有檔案的功能,常用的filesystem庫的迭代器是:directory_iterator和recursive_directory_iterator,後者相對於前者提供了遞迴遍歷的功能。
1).cur目錄下結構如下
cur/
—build.sh
—src/
——main.cpp
——makefile
2).進入/home/test/cur目錄,執行build.sh編譯程式後,留在當前目錄執行可執行檔案
3).假設首先掃瞄到的檔案是 build.sh
string curpath = 「/home/test/cur/」 ;
//定義乙個可以遞迴的目錄迭代器,用於遍歷
boost::filesystem::recursive_directory_iterator itend;
for(boost::filesystem::recursive_directory_iterator itor( curpath.c_str() ); itor != itend ;++itor)
//判斷檔案的狀態資訊
if(boost::filesystem::is_regular_file(file))
//更改拓展名
boost::filesystem::path tmppath = filepath;
//假設遍歷到了cpp檔案,想看下對應的.o檔案是否存在
tmppath.replace_extension(".o");
//判斷檔案是否存在
if( boost::filesystem::exists( tmppath.string() ) )
//刪除檔案
//remove只能刪除普通檔案,而不能刪除目錄
boost::filesystem::remove(tmppath.string());
//remove_all則提供了遞迴刪除的功能,可以刪除目錄
boost::filesystem::remove_all(tmppath.string());
//移動檔案 & 拷貝檔案
//srcpath原路徑,srcpath的型別為string
//destpath目標路徑,destpath的型別為string
boost::filesystem::rename(srcpath , destpath);
boost::filesystem::copy_file(srcpath , destpath);
//拷貝目錄
boost::filesystem::copy_files("/home/test","/dev/shm")
}boost::filesystem還可以建立目錄:
if( !boost::filesystem::exists( strfilepath ) )
boost::filesystem提供的操作當然不只如此。使用boost::filesystem操作時加上異常捕獲,也能夠增加**的魯棒性,在此不進行累述。 boost 檔案 目錄操作
filesystem庫是檔案系統操作庫,可以使用其中的basic path類用來操作目錄 檔案,使用需要包含編譯好的system庫和filesystem庫,我們一般不直接使用basic path,而是使用typedef path和wpath。使用它需要包含 boost filesystem.hpp ...
Linux 操作檔案目錄
命令 說明語法 引數引數說明 ls顯示檔案和目錄列表 ls alrtafr name.l列出檔案的詳細資訊 a列出當前目錄所有檔案,包含隱藏檔案 mkdir 建立目錄 mkdir p dirname p父目錄不存在情況下先生成父目錄 cd切換目錄 cd dirname touch 生成乙個空檔案 e...
26 操作檔案目錄
操作檔案和目錄的函式一部分在os模組中,一部分在os.path模組中。檢視 建立和刪除目錄 檢視當前目錄的絕對路徑 os.path.abspath users michael 在某個目錄下建立乙個新目錄,首先把新目錄的完整路徑表示出來 os.path.join users michael testd...