filesystem庫是檔案系統操作庫,可以使用其中的basic_path類用來操作目錄、檔案,使用需要包含編譯好的system庫和filesystem庫,我們一般不直接使用basic_path,而是使用typedef : path和wpath。 使用它需要包含"boost/filesystem.hpp"。
boost::filesystem::path p1("d:\\dir"); //windows下既可使用斜槓也可使用反斜槓(資源管理器位址列中使用的就是反斜槓),又因為在c++中反斜槓是轉義字元的標誌,所以使用反斜槓的話還得再加乙個反斜槓
boost::filesystem::path p2("d:/dir/data.dat"); //windows下推薦使用正斜槓
boost::filesystem::path p3("/user/dir"); //linux下使用正斜槓
boost::filesystem::path p4 = "./dir"; //path的建構函式沒有宣告為explicit,字串可以隱式轉換為path物件
cout << p1 << endl; //支援流輸出操作,輸出為"d:\dir\child"
if (p1 == p2); //支援比較操作
auto iter = p1.begin(); //支援迭代器來迭代其中的字串
std::string strdir = p1.string(); //獲取字串(建構函式中傳入的字串為相對路徑的話這裡也是相對路徑)
bool bres = boost::filesystem::portable_posix_name(strdir); //判斷是否符合posix檔案命名規範
boost::filesystem::windows_name(strdir); //判斷是否符合windows檔案命名規範
boost::filesystem::portable_name(strdir); //相當於portable_posix_name() && windows_name
boost::filesystem::native(strdir); //在windows下相當於windows_name,其它作業系統下只是簡單的判斷檔名不是空格且不含斜槓
boost::filesystem::path parentpath = p3.parent_path(); //獲得父路徑
boost::filesystem::path parentpath = p3.system_complete(); //獲得全路徑(絕對路徑)
std::string name = p2.filename().string(); //檔名: data.dat
std::string s = p2.stem().string(); //不含副檔名的檔名: data
std::string extname = p2.extension().string(); //副檔名: dat
p1.is_complete(); //是否是乙個完整的絕對路徑
p1.relative_path(); //獲得path的相對路徑
boost::filesystem::path p("c:/***/yyy");
p1.root_path(); //根路徑: "c:/"
p1.root_name(); //根名字:"c:"
p1.root_directory(); //根目錄: "/"
p1.remove_filename(); //刪除當前路徑中最後的檔名
p1.replace_extension("hxx"); //改變副檔名
// filesystem使用異常來處理檔案操作時發生的錯誤,所以使用的時候應該加上異常處理
trycatch (boost::filesystem::filesystem_error& e)
boost::filesystem::exists(p1); //是否存在
boost::filesystem::is_directory(p1); //是否是目錄
boost::filesystem::is_regular_file(p1); //是否是普通檔案
boost::filesystem::is_empty(p1); //目錄是否為空或檔案大小是否為0
boost::filesystem::is_symlink(p1); //是否為鏈結檔案
boost::filesystem::is_other(p1); //當檔案存在且不是普通檔案、目錄或鏈結檔案時返回true,其它檔案型別可以通過檔案狀態類file_status獲得
boost::filesystem::current_path(); //獲得當前路徑
boost::filesystem::initial_path(); //獲得進入main函式時的當前路徑
boost::filesystem::last_write_time(p1); //獲得檔案最後修改時間
boost::filesystem::space(p1); //獲得路徑下磁碟空間分配情況
boost::filesystem::remove(p1); //刪除檔案或空目錄
boost::filesystem::remove_all(p1); //刪除目錄
boost::filesystem::create_directory(p1); //建立一級目錄
boost::filesystem::create_directories(p1); //建立多級目錄
boost::filesystem::copy_file(p1, p2); //拷貝
boost::filesystem::rename(p1, p2); //改名
void recursive_dir(const boost::filesystem::path& dir)
}//directory_iterator不支援深度遍歷,可以使用效率更高的recursive_directory_iterator或wrecursive_directory_iterator
typedef boost::filesystem::recursive_directory_iterator rd_iterator;
rd_iterator end;
rd_iterator pos(p1);
for (; pos != end; pos++)
C 使用BOOST操作檔案 目錄
在boost庫出現之前,c 對於檔案和目錄的操作,大都借助於unix提供的底層檔案和目錄介面。boost中filesystem庫可以跨平台操作目錄 檔案等,在不失效能的情況下,提供了友好的操作方法。include編譯時,需要鏈結 lboost filesystem當安裝路徑不是unix環境變數中設定...
目錄檔案操作
一 在不使用mfc的程式中獲得某個目錄下的所有檔名稱,包括子目錄。把檔名稱以乙個固定的程度放入乙個緩衝中,這個緩衝要足夠的大,能容下所有的檔名稱。函式的輸入為要查詢的根目錄,輸出為存放所有檔名稱的緩衝 演算法 使用遞迴 二 void findfileindir char rootdir,char s...
目錄檔案操作
include include dir opendir 目錄名字 成功時,返回乙個指向目錄檔案的指標,失敗時,返回null 同上 struct dirent readdir dir dir 成功時,返回乙個dirent結構體型別的指標,如果讀到末尾或失敗,返回null。int closedir di...