Boost.Filesystem 庫爲對路徑、文件和目錄進行查詢和操做提供了可移植的工具,已經被C++標準委員會接納包含到TR2中。ios
使用Boost.Filesystem 庫以前要先編譯它,請參考《Boost的編譯》app
#include <boost/filesystem.hpp>
全部Boost.Filesystem庫的內容都處於名空間boost::filesystem以內。函數
在Boost.Filesystem庫裏basic_path是最重要的類,它以系統無關的方式保存路徑、文件名。象std::basic_string 同樣,針對char和wchar_t,分別特化了path和wpath。
basic_path的構造函數:工具
basic_path( const string_type & s );
basic_path( const value_type * s );
template <class InputIterator> basic_path(InputIterator s, InputIterator last);
輸入參數是一個字符串(或字符迭代器),表示路徑名,能夠輸入系統原生路徑名或可移植路徑名
原生路徑名沒啥好說的,好比C:\Windows; D:\abc\ttt.txt等
可移植路徑名的定義和Unix的路徑定義相同,以「/」做爲路徑分隔符。測試
成員函數 | 做用 |
---|---|
template <class InputIterator>basic_path& append(InputIterator first, InputIterator last); | 將字符串 s 或字符序列 [first,last) 中的路徑元素追加到保存的路徑中。 |
basic_path& remove_filename(); | 去除路徑中的文件名 |
basic_path& replace_extension( const string_type & new_extension = "" ); | 替換擴展名 |
string_type string() | 獲得可移植路徑名 |
string_type file_string() | 獲得系統原生文件名 |
string_type directory_string() | 獲得系統原生路徑名 |
string_type root_name() const; | 獲得根名 |
string_type root_directory() const; | 獲得根目錄 |
basic_path root_path() const; | 獲得根路徑:根名+根目錄 |
basic_path relative_path() const; | 獲得相對路徑 |
string_type filename() const; | 獲得文件名 |
basic_path parent_path() const; | 獲得父路徑:根路徑+相對路徑 |
string_type stem(const Path & p) const; | 獲得不帶擴展名的文件名 |
string_type extension(const Path & p) const; | 獲得擴展名 |
bool empty() const; | path未賦值 |
bool is_complete() const; | 是不是完整路徑 |
bool has_root_path() const; bool has_root_name() const; bool has_root_directory() const; bool has_relative_path() const; bool has_filename() const; bool has_branch_path() const; |
路經中是否包含指定的項 |
string(): /folder1/folder2/folder3/filename.ext
file_string(): \folder1\folder2\folder3\filename.ext
directory_string(): \folder1\folder2\folder3\filename.ext
root_name():
root_directory(): /
root_path(): /
relative_path(): folder1/folder2/folder3/filename.ext
filename(): filename.ext
parent_path(): /folder1/folder2/folder3
stem(): filename
extension(): .ext
replace_extension("new"): /folder1/folder2/folder3/filename.new
append(buf, buf+sizeof(buf)): /folder1/folder2/folder3/filename.new/hello
remove_filename(): /folder1/folder2/folder3/filename.new/
函數名 | 做用 |
---|---|
system_complete(path); | 返回完整路徑(相對路徑+當前路徑) |
exists(path); | 文件是否存在 |
is_directory(path); is_directory(file_status); |
是不是路徑 |
is_regular_file(path); is_regular_file(file_status); |
是不是普通文件 |
is_symlink(path); is_symlink(file_status); |
是不是一個連接文件 |
file_status status(path); | 返回路徑名對應的狀態 |
template <class Path> const Path& initial_path(); | 獲得程序運行時的系統當前路徑 |
template <class Path> Path current_path(); | 獲得系統當前路徑 |
template <class Path> void current_path(const Path& p); | 改變當前路徑 |
template <class Path> space_info space(const Path& p); | 獲得指定路徑下的空間信息,space_info 有capacity, free 和 available三個成員變量,分別表示容量,剩餘空間和可用空間。 |
template <class Path> std::time_t last_write_time(const Path& p); | 最後修改時間 |
template <class Path> void last_write_time(const Path& p, const std::time_t new_time); | 修改最後修改時間 |
template <class Path> bool create_directory(const Path& dp); | 創建路徑 |
template <class Path1, class Path2> void create_hard_link(const Path1& to_p, const Path2& from_p); template <class Path1, class Path2> error_code create_hard_link(const Path1& to_p, const Path2& from_p, error_code& ec); |
創建硬連接 |
template <class Path1, class Path2> void create_symlink(const Path1& to_p, const Path2& from_p); template <class Path1, class Path2> error_code create_symlink(const Path1& to_p, const Path2& from_p, error_code& ec); |
創建軟連接 |
template <class Path> void remove(const Path& p, system::error_code & ec = singular ); | 刪除文件 |
template <class Path> unsigned long remove_all(const Path& p); | 遞歸刪除p中全部內容,返回刪除文件的數量 |
template <class Path1, class Path2> void rename(const Path1& from_p, const Path2& to_p); | 重命名 |
template <class Path1, class Path2> void copy_file(const Path1& from_fp, const Path2& to_fp); | 拷貝文件 |
template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>()); | 以base以基,p做爲相對路徑,返回其完整路徑 |
template <class Path> bool create_directories(const Path & p); | 創建路徑 |
構造函數:
spa
explicit basic_directory_iterator(const Path& dp);
basic_directory_iterator();
basic_directory_iterator
從構造參數獲得目錄,每一次調用 operator++
,它就查找並獲得下一個文件名直到目錄元素的末尾。不帶參數的構造函數 basic_directory_iterator()
老是構造一個 end 迭代器對象,它是惟一一個用於結束條件的合法迭代器。
示例代碼,獲得指定目錄下的全部文件名:code
遞歸遍歷目錄的迭代器,它的構造參數與basic_directory_iterator相同,當調用 operator++
時,若是當前值是一個目錄,則進入下一級目錄。
它有三個成員函數:對象
函數名 | 做用 |
---|---|
int level() const; | 獲得當前搜索深度 |
void pop(); | 調用pop()後,下一次遞增就會直接返回上一級目錄 |
void no_push(); | 調用no_push()後,即使下一個元素是目錄類型也不進入 |
示例代碼,獲得指定目錄下的全部文件名(和上例做用相同):遞歸