filesystem
包含標頭 <filesystem>
,以存取可操作及擷取路徑、檔案和目錄的相關信息的類別和函式。
語法
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
重要
在 Visual Studio 2017 版中, <filesystem>
標頭尚未C++標準。 Visual Studio 2017 RTW 中的C++會實作 ISO/IEC JTC 1/SC 22/WG 21 N4100 中的最終草稿標準。 Visual Studio 2017 15.7 版和更新版本支援新的 C++17 <filesystem>
標準。
這是全新的實作,與舊 std::experimental
版不相容。 符號連結支援、錯誤修正和標準必要行為變更是必要的。 在 Visual Studio 2019 16.3 版和更新版本中,包括 <filesystem>
只提供新的 std::filesystem
。 包含 <experimental/filesystem>
僅提供舊的 experimental 實作。 在連結庫的下一個 ABI 中斷版本中,將會移除實 experimental 作。
此標頭支援兩種主機操作系統之一的文件系統:Microsoft Windows 和 POSIX。
雖然大部分功能對這兩個作業系統而言是共通的,不過本文還是指出其中的差異。 例如:
Windows 支援多個根名稱,例如
c:
或\\network_name
。 文件系統是由樹狀結構樹系所組成,每個樹系都有自己的根目錄,例如c:\
或\\network_name\
,以及每個樹系都有自己的目前目錄,用來完成相對路徑名稱(不是絕對路徑名稱的目錄)。POSIX 支援沒有根名稱、單一根目錄和單一目前目錄
/
的單一樹狀結構。
另一項重大差異是路徑名稱的原生表示法:
Windows 使用以 Null 結尾的
wchar_t
序列,編碼為 UTF-16(每個字元的一或多個元素)。POSIX 使用以 Null 結尾的
char
序列,編碼為 UTF-8(每個字元的一或多個元素)。類別
path
的物件會以原生形式儲存pathname,但支援在此預存表單與數個外部表單之間輕鬆轉換:以 Null 結尾的
char
序列,編碼為操作系統所優先。的 Null 終止序列
char
,編碼為 UTF-8。以 Null 結尾的
wchar_t
序列,編碼為操作系統所優先。的 Null 終止序列
char16_t
,編碼為 UTF-16。的 Null 終止序列
char32_t
,編碼為 UTF-32。
請視需要考慮使用一或多個
codecvt
Facet,在這些表示法之間進行轉換。 如果未指定特定的地區設定物件,則會從全域地區設定取得這些 Facet。
另一項差異是每個作業系統讓您用來指定檔案或目錄存取權限的詳細資料:
Windows 會記錄檔案是只讀還是可寫入的檔案,這是對目錄沒有意義的屬性。
POSIX 會記錄檔案是否可以讀取、寫入或執行(如果目錄已掃描)。 而且,無論每個作業都允許擁有者、擁有者的群組,還是針對每個人,再加上一些其他許可權。
這兩個系統在根目錄名稱之後有通用的路徑名稱結構。 針對 pathname c:/abc/xyz/def.ext
:
根名稱為
c:
。根目錄為
/
。根路徑為
c:/
。相對路徑為
abc/xyz/def.ext
。父路徑為
c:/abc/xyz
。檔案名態
def.ext
。此字幹為
def
。延伸名為
.ext
。
次要差異是pathname中目錄序列之間的慣用分隔符。 這兩個作業系統都可讓您撰寫正斜線 /
,但在某些內容中,Windows 偏好反斜杠 \
。 實作會將慣用的分隔符儲存在 中的數據成員 preferred_separator
中 path
。
最後, path
物件具有重要的功能:您可以在標頭 <fstream>
中定義的類別中,使用檔名自變數。
如需詳細資訊和程式代碼範例,請參閱文件系統導覽(C++)。
成員
類別
名稱 | 描述 |
---|---|
directory_entry 類別 |
描述 或 recursive_directory_iterator 所directory_iterator 傳回且包含的物件path 。 |
directory_iterator 類別 |
描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。 |
filesystem_error 類別 |
擲回例外狀況的基底類別,以報告低階系統溢位。 |
path 類別 |
定義一個類別,以儲存適合做為檔案名稱之樣板類型 String 的物件。 |
recursive_directory_iterator 類別 |
描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。 迭代器也可以下降到子目錄。 |
file_status 類別 |
包裝 file_type 。 |
結構
名稱 | 描述 |
---|---|
space_info 結構 |
保留磁碟區的相關資訊。 |
函式
操作員
列舉
名稱 | 描述 |
---|---|
copy_options |
此列舉會搭配使用 copy_file,並在已存在目的地檔案時決定行為。 |
directory_options |
指定目錄迭代器之選項的列舉。 |
file_type |
檔案類型的列舉。 |
perm_options |
列舉函式 permissions 的選項。 |
perms |
用來傳達權限和權限選項的位元遮罩類型 |