Boost Filesystem模塊解析

1.概念

pathname:路徑名,比如:"/home/beman/boost/trunk/index.html";
filename:文件名,比如:index.html
stem:詞幹,比如index.html中的詞幹爲index。
extension:文件擴展名,比如:index.html爲html。

路徑的格式:
通用格式(generic format):形如/my_directory/my_file.txt這樣風格的路徑名,它們被類POSIX操作系統使用,比如Unix系列、Linux、和Mac操作系統等。Windows也能識別通用格式,它是熟悉的國際URL格式的基礎。目錄分隔符是一個或多個斜槓符(slash character)’/’

本地格式(native format):是被特定操作系統自己定義的格式。對於Windows,斜槓‘/’和反斜槓(blackslash)**’’**都可以被用作目錄分隔符,比如/my_directory\my_file.txt ,當然,如果你要寫成C++字符串形式,就爲/my_directory\my_file.txt。
如果在Windows系統的路徑名中出現驅動器說明符(a drive specifier)或反斜槓(a blackslash),則將其視爲本地格式。

通用格式非常適合編寫可移植的程序,這些程序可以在任何操作系統下工作!

2.使用

1)boost::filesystem::path

以下示例代碼幫助學習類path的iterators, observers, composition, decomposition, and query functions。
在這裏插入圖片描述
在你的系統中運行示例代碼,輸入文件系統中真實存在的不同路徑實參。以下是我們將詳細談論的調用(invocation)
在這裏插入圖片描述
在這裏插入圖片描述

知識點講解:
1.通常的一個需求是由一系列的目錄組合一個路徑名。類path使用/和/=運算符添加元素。但是值得注意的是,這些操作是添加操作系統更偏好的目錄分隔符。比如,類POSIX系統是斜槓’/’,而類Windows系統是反斜槓’’。

2.路徑名是一系列目錄名和文件名元素的組合,爲了能分解出各個元素,類class提供了類STL的迭代器的函數begin()和end()。

3.當操作系統內部交互或者和用戶交互時,應該使用本地格式觀察者(native format observers)。
當希望寫出可移植代碼時,通用格式觀察者應該被使用(generic format observers)。

4.path對象總是以本地格式保存路徑名,但在其它情況下,路徑名保持原始格式。如果本地格式有多個形式,可以利用preferred()函數轉化爲操作系統更偏好的格式。比如Windows操作系統,它將斜槓轉換爲反斜槓。

5.需要注意一點,在Windows系統中,沒有根文件名(比如drive specifier or network name),一個單獨的slash(or backslash)是一個相對路徑(relative path)。但是,在類POSIX系統中是絕對路徑(absolute path)。

2)Boost.Filesystem中包含的狀態查詢函數(status query functions)

boost::filesystem命名空間下有exists, is_directory, 和is_regular_file(是否文件)三個函數。它們都返回bool值,形參都爲path類對象。如果滿足函數名所描述的條件,則返回true;否則,返回false,包括path實參不能被發現時。

3)目錄迭代

Boost.Filesystem的directory_iterator類遵循標準庫的istream_iterator的一般模式。它從path構造,遍歷目錄的內容。默認構造的directory_iterator充當結束迭代器。
directory_iterator的值類型是directory_entry。一個directory_entry對象包含path和file_state信息。它不僅能被直接使用,而且也能在函數調用時傳遞給path實參。
在這裏插入圖片描述
將路徑傳遞給命令行參數,下面是Linux和Windows的測試結果:
在這裏插入圖片描述
我們可以對其做一些改善:

  • 文件名(filename)比路徑名(pathname)更易讀。 Linux列表沒有排序。那是因爲directory

  • iteration的順序不是固定的。其順序性依賴於潛在的操作系統API和具體的文件系統。因此我們需要自己對文件系統排序。
    解決方案:
    使用sort算法可以對包含字符串的容器按照字典序排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章