Filesystem 程式庫 (自 C++17)
出自 cppreference.com
< cpp
Filesystem 程式庫提供了對檔案系統及其組件(例如路徑、常規檔案和目錄)執行操作的功能。
filesystem 程式庫最初開發為 boost.filesystem,作為 ISO/IEC TS 18822:2015 技術規範發布,並最終在 C++17 中合併至 ISO C++。目前,Boost 的實作在比 C++17 程式庫更多的編譯器和平台上可用。
如果實作無法存取階層式檔案系統,或該系統未提供必要功能,則 filesystem 程式庫的功能可能無法使用。若底層檔案系統不支援某些特性(例如 FAT 檔案系統缺少符號連結且禁止多重硬連結),則這些特性可能無法使用。在這些情況下,必須報告錯誤。
如果呼叫此程式庫中的函式導致「檔案系統競爭」(file system race),即多個執行緒、處理序或電腦對檔案系統中的同一物件交錯存取與修改,則其行為是未定義的。
目錄 |
[編輯] 程式庫範圍定義
- 檔案 (file):一種持有資料、可寫入、可讀取或兩者皆可的檔案系統物件。檔案具有名稱和屬性,其中之一是檔案類型。
- 目錄 (directory):作為目錄條目容器的檔案,這些條目識別其他檔案(其中一些可能是其他巢狀目錄)。討論特定檔案時,它作為條目出現的目錄即為其父目錄 (parent directory)。父目錄可以用相對路徑名 ".." 表示。
- 常規檔案 (regular file):將名稱與現有檔案關聯的目錄條目(即硬連結)。如果支援多重硬連結,則在移除最後一個硬連結後,檔案才會被刪除。
- 符號連結 (symbolic link):將名稱與路徑關聯的目錄條目,該路徑可能存在,也可能不存在。
- 其他特殊檔案類型:區塊 (block)、字元 (character)、FIFO (具名管線)、socket (通訊端)。
- 檔案名稱 (file name):命名檔案的字串。允許的字元、大小寫敏感度、最大長度以及不允許的名稱均由實作定義。名稱 "."(點)和 ".."(點點)在程式庫層級具有特殊含義。
- 路徑 (path):識別檔案的元素序列。它以可選的 root-name 開頭(例如 Windows 上的 "C:" 或 "//server"),後接可選的 root-directory(例如 Unix 上的 "/"),再後接零個或多個檔案名稱序列(除最後一個外,其餘必須為目錄或目錄連結)。路徑字串表示法(路徑名)的本機格式(例如使用哪些字元作為分隔符)和字元編碼由實作定義,此程式庫提供了可移植的路徑表示法。
- 絕對路徑 (absolute path):明確識別檔案位置的路徑。
- 標準路徑 (canonical path):一種不包含符號連結、"." 或 ".." 元素的絕對路徑。
- 相對路徑 (relative path):識別檔案相對於檔案系統中某個位置的路徑。特殊路徑名稱 "."(點,「目前目錄」)和 ".."(點點,「父目錄」)都是相對路徑。
類別 | |
| 定義於標頭檔
<filesystem> | |
| 定義於命名空間
std::filesystem | |
| (C++17) |
表示路徑 (類別) |
| (C++17) |
在檔案系統錯誤時拋出的異常 (類別) |
| (C++17) |
目錄條目 (類別) |
| (C++17) |
目錄內容的迭代器 (類別) |
| (C++17) |
目錄及其子目錄內容的迭代器 (類別) |
| (C++17) |
表示檔案類型與權限 (類別) |
| (C++17) |
關於檔案系統可用與閒置空間的資訊 (類別) |
| (C++17) |
檔案類型 (列舉) |
| (C++17) |
識別檔案系統權限 (列舉) |
| (C++17) |
指定權限操作的語義 (列舉) |
| (C++17) |
指定複製操作的語義 (列舉) |
| (C++17) |
用於迭代目錄內容的選項 (列舉) |
| (C++17) |
表示檔案時間值 (型別定義) |
非成員函式 | |
| 定義於標頭檔
<filesystem> | |
| 定義於命名空間
std::filesystem | |
| (C++17) |
組成絕對路徑 (函式) |
| (C++17) |
組成標準路徑 (函式) |
| (C++17) |
組成相對路徑 (函式) |
| (C++17) |
複製檔案或目錄 (函式) |
| (C++17) |
複製檔案內容 (函式) |
| (C++17) |
複製符號連結 (函式) |
| (C++17)(C++17) |
建立新目錄 (函式) |
| (C++17) |
建立硬連結 (函式) |
| (C++17)(C++17) |
建立符號連結 (函式) |
| (C++17) |
返回或設定當前工作目錄 (函式) |
| (C++17) |
檢查路徑是否指向現有的檔案系統物件 (函式) |
| (C++17) |
檢查兩個路徑是否指向同一個檔案系統物件 (函式) |
| (C++17) |
返回檔案大小 (函式) |
| (C++17) |
返回指向該特定檔案的硬連結數量 (函式) |
| (C++17) |
獲取或設定最後資料修改時間 (函式) |
| (C++17) |
修改檔案存取權限 (函式) |
| (C++17) |
獲取符號連結的目標 (函式) |
| (C++17)(C++17) |
刪除檔案或空目錄 以遞迴方式刪除檔案或目錄及其所有內容 (函式) |
| (C++17) |
移動或重新命名檔案或目錄 (函式) |
| (C++17) |
透過截斷或填充零來改變常規檔案的大小 (函式) |
| (C++17) |
確定檔案系統上的可用閒置空間 (函式) |
| (C++17)(C++17) |
確定檔案屬性 確定檔案屬性,並檢查符號連結目標 (函式) |
| (C++17) |
返回適合存放臨時檔案的目錄 (函式) |
檔案類型 | |
| (C++17) |
檢查給定路徑是否指向區塊裝置 (函式) |
| (C++17) |
檢查給定路徑是否指向字元裝置 (函式) |
| (C++17) |
檢查給定路徑是否指向目錄 (函式) |
| (C++17) |
檢查給定路徑是否指向空檔案或空目錄 (函式) |
| (C++17) |
檢查給定路徑是否指向具名管線 (FIFO) (函式) |
| (C++17) |
檢查參數是否指向其他檔案類型 (函式) |
| (C++17) |
檢查參數是否指向常規檔案 (函式) |
| (C++17) |
檢查參數是否指向具名 IPC socket (函式) |
| (C++17) |
檢查參數是否指向符號連結 (函式) |
| (C++17) |
檢查檔案狀態是否已知 (函式) |
[編輯] 附註
使用此程式庫可能需要額外的編譯器/連結器選項。9.1 版之前的 GNU 實作需要連結 -lstdc++fs,而 9.0 版之前的 LLVM 實作需要連結 -lc++fs。
| 功能測試巨集 | 數值 | 標準 | 功能 |
|---|---|---|---|
__cpp_lib_filesystem |
201703L |
(C++17) | 檔案系統函式庫 |
[編輯] 參閱
| C++ 文件 關於 檔案系統 TS
|