Boost學習筆記 filesystem

2021-07-01 21:12:24 字數 2483 閱讀 6104

檔案操作是程式設計中非常重要的乙個部分,filesystem庫是乙個可移植的檔案系統操作庫,它使用posix標準檔案系統的路徑,介面很類似標準庫的容器和迭代器,使c++具有了類似指令碼餘姚的功能,可以跨平台操作目錄、檔案,寫出通用的指令碼程式。

filesystem庫的核心類是path,它遮蔽了不同檔案系統的差異,使用可移植的posix語法提供了通用的目錄,路徑表示。

簡單的sample如下:

#include 

using

namespace boost::filesystem;

char str = "the path is (/root).";

path p( str + 13, str + 14 );

assert( !p.empty() );

p /= "home";

string dirname = "pi";

p += "/";

p.contcat( ".bashrc" );

cout

<< p << endl;

// "/home/pi/.bashrc"

filesystem提供了一系列的檔名檢查函式,可以根據系統的命名規則判斷乙個檔名是否合法:

portable_posix_name()

posix檔名規範檢查

windows_name()

windows檔名規範檢查

portable_name()

相當於portable_posix_name() && windows_name(),但名字不能以點號或者連字元開頭,保證檔名可以移植到所有作業系統。

portable_directory_name()

判斷更嚴格,包含portable_name(),並且要求名字中不能出現點號。

portable_file_name()

類似portable_directory_name(),要求檔名最多有乙個點號,且字尾不能超過3個字元。

path的三個成員root_name(), root_directory(), root_path()用於處理根目錄

path p("/usr/local/include/***.hpp" );

cout << p.root_name() << endl; //

""cout << p.root_directory() << endl; //

"/"cout << p.root_path() << endl; //

"/"path p( "c:/windows/system32" );

cout << p.root_name() << endl; //

"c:"

cout << p.root_directory() << endl; //

"/"cout << p.root_path() << endl; //

"c:/"

directory_iterator end;

for( directory_iterator pos( "/home/chrono/boost/" ); pos != end; ++pos )

// define a std:pair range for simplifying

typedef std::pairdir_range;

dir_range dr( director_iterator( "/home/chrono/boost/" ), director_iterator() );

boost_foreach( auto& x, dr )

directory_iterator迭代器返回的物件不是path,而是乙個directory_entry,但是由於directory_entry類定義了乙個到path的型別轉換函式,因此可以在需要path的語境中隱式轉換到path。

directory_iterator只能迭代本層目錄,不支援深度遍歷目錄,可以使用遞迴來實現

void recursive_dir( const path& dir )  else 

}}

typedef recursive_directory_iterator rd_iterator;

rd_iterator end;

for( rd_iterator pos( "/home/chrono/test" ); pos != end; ++pos )

// sample of no_push()

rd_iterator end;

for( rd_iterator pos( "/home/chrono/test" ); pos != end; ++pos )

cout << *pos

<< endl;

}

boost 學習筆記

先來看看如何賦值把 include include include include include include include using namespace std int tmain int argc,tchar ar include include include include incl...

Boost學習筆記 operators

如果乙個類要實現operator operator 意味著可能也要實現operator operator 等其它操作符。只要提供了operator operator 就可以根據這兩個操作符實現operator operator 等其它操作符。而且這種實現是單調的 operator const t x...

Boost庫學習筆記

timer類 由於精度原因,不適合於精度很高或時間跨度很大的地方。也不能很好的跨平台。呼叫elapsed min 和elapsed max 分別獲取其精度,而且其精度根據平台會有變化。progress timer類繼承與timer類,但是其有乙個析構函式,析構的時候會自動呼叫elapsed 輸出從構...