boost庫下檔案處理庫 探索Boost檔案系統庫

2021-10-07 18:04:30 字數 3374 閱讀 7289

c++語言(實際上是c++標準)最常見的問題之一是缺少定義明確的庫來幫助處理檔案系統查詢和操作。 這種缺席導致程式設計師使用本機作業系統提供的應用程式介面(api),從而使**無法跨平台移植。 考慮乙個簡單的情況:您需要確定檔案是否為目錄型別。 在microsoft®windows®平台中,可以通過呼叫windows.h標頭檔案中定義的getattributes庫函式來執行此操作:

dword getfileattributes (lpctstr lpfilename);
對於目錄,結果應為file_attribute_directory,並且您的**必須進行檢查。 在unix®和linux®平台上,可以使用statfstat例程以及sys / stat.h中定義的s_isdir巨集來實現相同的功能。 您還必須了解stat結構。 這是相應的**:

#include #include int main()

在深入研究boost filesystem庫的細微差別之前, 清單1顯示了使用boost api判斷檔案是否為directory型別的**。

清單1.確定檔案是否為目錄型別的**

#include #include 「boost/filesystem.hpp」

int main()

該**是不言自明的,您不需要了解任何特定於系統的例程。 驗證該**可以在gcc-3.4.4和cl-13.10.3077上進行編譯,而無需進行修改。

理解boost檔案系統庫的關鍵是path物件,因為在檔案系統庫中定義的幾個例程僅旨在與適當的path物件一起使用。 通常,檔案系統路徑取決於作業系統。 例如,眾所周知,unix和linux系統使用virgule(/)字元作為目錄分隔符,而windows使用反斜槓(\)來實現類似目的。boost::filesystem::path旨在精確抽象該功能。path物件可以通過多種方式初始化,最常見的是使用char*std::string進行初始化,如清單2所示。

清單2.建立boost路徑物件的方法

path(); // empty path 

path(const char* pathname);

path(const std::string& pathname);

path(const char* pathname, boost::filesystem::path::name_check checker);

path(const std::string& pathname, boost::filesystem::path::name_check checker);

在初始化path物件時,可以以本機格式或可移植作業系統介面(posix)委員會定義的可移植格式提供pathname變數。 兩種方法在實踐中都有其相對的權衡。 考慮一種情況,您要處理軟體建立的目錄,然後在unix和linux系統上的/ tmp / mywork中以及在windows上的c:\ tmp \ mywork中找到該目錄。 有幾種方法可以解決此問題。 清單3顯示了本機面向格式的方法。

清單3.使用本機格式初始化路徑

#ifdef unix

boost::filesystem::path path("/tmp/mywork");

#else

boost::filesystem::path path("c:\\tmp\\mywork ");

#endif

需要乙個#ifdef來基於每個作業系統初始化路徑。 但是,如果您更喜歡使用可移植格式,請檢視清單4 。

清單4.使用可移植格式初始化路徑

boost::filesystem::path path("/tmp/mywork");
請注意,path::name_check是指名稱檢查功能原型。 如果名稱檢查函式的引數輸入pathname對於特定的作業系統或檔案系統有效,則該函式將返回「 true」。 boost filesystem library隨附了幾個名稱檢查功能,也歡迎您提供自己的變體。 一些更常用的名稱檢查功能是boost提供的portable_posix_namewindows_name

path物件帶有幾種成員方法。 這些成員例程不會修改檔案系統,但會根據路徑名提供有用的資訊。 本節概述了其中一些例程:

檔案系統操作經常遇到意外問題,boost filesystem library使用c++異常報告執行時錯誤。boost::filesystem_error類是從std::runtime_error類派生的。 庫中的函式使用filesystem_error異常來報告操作錯誤。 對應於可能的不同錯誤型別,boost標頭中定義了錯誤**。 使用者**通常位於try...catch塊中,該塊使用filesystem_error異常報告相關的錯誤訊息。 清單7提供了乙個重新命名檔案的小例子,除了from路徑中的檔案不存在。

清單7. boost中的錯誤處理

#include #include 「boost/filesystem.hpp」

int main()

catch(boost::filesystem::filesystem_error e)

return 0;

}

boost::filesystem提供了不同的功能類別:有些函式(例如is_directory用於查詢檔案系統,而另一些函式(例如create_directory)則主動對其進行修改。 根據其功能,功能大致分為以下幾類:

boost filesystem庫由以下屬性函式組成:

這組函式負責建立新檔案和目錄,刪除檔案,等等:

boost filesystem庫包含以下實用程式和謂詞功能:

boost filesystem庫包含以下雜項功能:

本文簡要介紹了boost filesystem庫。 不應將其視為boost中整個檔案系統介面的全面文件。 沒有討論api集的內部,也沒有討論這些api在非unix或windows平台(例如vms)中的微妙之處。 有關檔案系統的更多資訊,請參閱參考資料 。

翻譯自:

C 使用Boost庫處理XML檔案 1

所用庫為boost 1 62 0,ide為visual studio 2013,win7 8系統。匯入標頭檔案 這個使用比較方便,可以先設定資料夾包含位置再匯入,也可以直接include檔案絕對路徑,boost中有些庫使用,還要編譯,比較麻煩,花了很多時間,還是用不了。目標xml檔案,info.xm...

(八)boost庫之異常處理

今天使用boost庫,將輕鬆的解決這個問題。先看看使用stl中的異常類的一般做法 使用stl定義自己的異常 class myexception public std exception myexception const char const msg,int errcode exception ms...

解析 Boost 庫的檔名

boost 庫編譯的 lib 檔案按下面的規則組合檔名 boost lib prefix boost lib name boost lib toolset boost lib thread opt boost lib rt opt boost lib version 這些定義為 boost lib ...