對於目前的程式碼,請加入 C++17 標準標頭 <filesystem> ,並使用 std::filesystem 命名空間來處理及擷取路徑、檔案與目錄資訊的類別與函式。 編譯時或 /std:c++17 稍後。
語法
#include <filesystem> // C++17 standard header file name
using namespace std::filesystem;
Note
歷史備註:在 C++17 標準化 <filesystem>之前,MSVC 在標頭中提供了獨立的預標準實作,該實作 <experimental/filesystem> 自 MSVC 建置工具 14.51 版本起被移除。 相關文件請參見 <experimental/filesystem>。
標<filesystem>頭支援 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。
請視需要考慮使用一或多個
codecvtFacet,在這些表示法之間進行轉換。 如果未指定特定的地區設定物件,則會從全域地區設定取得這些 Facet。- 以 Null 結尾的
另一項差異是每個作業系統讓您用來指定檔案或目錄存取權限的詳細資料:
- 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 類別 |
描述 或 directory_iterator 所recursive_directory_iterator傳回且包含的物件path。 |
directory_iterator 類別 |
描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。 |
filesystem_error 類別 |
一個用於拋出異常以報告低階系統錯誤的基底類別。 |
path 類別 |
定義一個類別,以儲存適合做為檔案名稱之樣板類型 String 的物件。 |
recursive_directory_iterator 類別 |
描述可循序遍訪檔案系統目錄中的檔案名稱的輸入迭代器。 迭代器也可以下降到子目錄。 |
file_status 類別 |
包裝 file_type。 |
結構
| 名稱 | 描述 |
|---|---|
space_info 結構 |
保留磁碟區的相關資訊。 |
Functions
操作員
列舉
| 名稱 | 描述 |
|---|---|
copy_options |
此列舉會搭配使用 copy_file,並在已存在目的地檔案時決定行為。 |
directory_options |
指定目錄迭代器之選項的列舉。 |
file_type |
檔案類型的列舉。 |
perm_options |
列舉函式 permissions 的選項。 |
perms |
用來傳達權限和權限選項的位元遮罩類型 |