boost::filesystem是Boost C++ Libraries中的一個模塊,主要作用是處理文件(Files)和目錄(Directories)。該模塊提供的類boost::filesystem::path專門用來處理路徑。而且,該模塊中還有很多獨立的函數能夠用來執行創建目錄、檢查文件是否存在等任務。
一、創建Paths
定義路徑時需要包含頭文件boost/filesystem.hpp,並且使用命名空間boost::filesystem;
路徑的創建很簡單,僅僅需要向類boost::filesystem::path()的構造器傳遞一個string;
構造器的輸入可以是一個沒有意義的字符串,因為構造器不會去檢測該路徑是否是合法路徑及是否存在;
path對象是一個跨平台的路徑對象。
path對象的屬性有下列這些:
1) path.string() 輸出字符串形式的路徑
2) path.stem() 文件名,不帶擴展名
3) path.extension() 返回文件擴展名
更詳細的內容見這里。
二、文件和目錄
該部分包括下列函數:
boost::filesystem::status(path) 查詢文件或目錄的狀態,返回的是boost::filesystem::file_status類型的對象
boost::filesystem::is_directory() 根據獲取的狀態判斷是否是目錄,返回bool
boost::filesystem::is_empty() 判斷是否為空
boost::filesystem::is_regular_file() 根據獲取的狀態判斷是否是普通文件,返回bool
boost::filesystem::is_symlink() 判斷符號連接(在windows系統中,后綴為lnk的文件為連接文件)
boost::filesystem::exists() 判斷是否存在
boost::filesystem::file_size() 返回文件的size,按bytes計算
boost::filesystem::last_write_time() 返回文件最后一次修改的時間
boost::filesystem::space() 返回磁盤的總空間和剩余空間,
boost::filesystem::create_directory() 創建目錄
boost::filesystem::create_directories() 遞歸創建整個目錄結構
boost::filesystem::remove() 刪除目錄
boost::filesystem::remove_all() 遞歸刪除整個目錄結構
boost::filesystem::rename() 重命名目錄
boost::filesystem::copy_file() 復制文件
boost::filesystem::copy_directory() 復制目錄
boost::filesystem::absolute() 獲取文件或目錄的絕對路徑
boost::filesystem::current_path() 如果沒有參數傳入,則返回當前工作目錄;否則,則將傳入的目錄設為當前工作目錄
三、目錄迭代(Directory Iterators)
boost::filesystem::directory_iterator() 迭代目錄下的所有文件
boost::filesystem::recursive_directory_iterator() 遞歸地遍歷一個目錄和子目錄,也就是迭代整個目錄結構下的所有文件
四、文件流(File Streams)
頭文件<fstream>定義的文件流不能將boost::filesystem::path定義的目錄作為參數。如果非要使用path對象打開文件流的話,那就添加頭文件<boost/filesystem/fstream.hpp>,如下:
#include <boost/filesystem/fstream.hpp>
#include <iostream>
using namespace boost::filesystem;
int main()
{
path p{"test.txt"};
ofstream ofs{p};
ofs << "Hello, world!\n";
}
參考文獻: