共用方式為


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(每個 char 動作者的一或多個元素)。

  • POSIX 使用以 Null 結尾的 char 序列,編碼為 UTF-8(每個 char 動作者的一或多個元素)。

  • 類別 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_separatorpath

最後, path 物件具有重要的功能:您可以在標頭 <fstream> 中定義的類別中,使用檔案名引數。

如需詳細資訊和程式碼範例,請參閱 檔案系統導覽(C++)。

成員

類別

名稱 描述
directory_entry 類別 描述 或 recursive_directory_iteratordirectory_iterator 傳回且包含 的物件 path
directory_iterator 類別 描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。
filesystem_error 類別 擲回例外狀況的基底類別,以報告低階系統溢位。
path 類別 定義一個類別,以儲存適合做為檔案名稱之樣板類型 String 的物件。
recursive_directory_iterator 類別 描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。 迭代器也可以下降到子目錄。
file_status 類別 包裝 file_type

結構

名稱 描述
space_info 結構 保留磁碟區的相關資訊。

函式

<filesystem> 函數

操作員

<filesystem> 運營商

列舉

名稱 描述
copy_options 此列舉會搭配使用 copy_file,並在已存在目的地檔案時決定行為。
directory_options 指定目錄迭代器之選項的列舉。
file_type 檔案類型的列舉。
perm_options 列舉函式 permissions 的選項。
perms 用來傳達權限和權限選項的位元遮罩類型

另請參閱

標頭檔參考