std::experimental::filesystem::create_directory, std::experimental::filesystem::create_directories
來自 cppreference.com
< cpp | experimental | fs
定義於標頭檔案 <experimental/filesystem> |
||
bool create_directory( const path& p ); bool create_directory( const path& p, error_code& ec ); |
(1) | (filesystem TS) |
bool create_directory( const path& p, const path& existing_p ); bool create_directory( const path& p, const path& existing_p, error_code& ec ); |
(2) | (filesystem TS) |
bool create_directories( const path& p ); bool create_directories( const path& p, error_code& ec ); |
(3) | (filesystem TS) |
1) 建立目錄 p,如同透過 POSIX mkdir() 函式,第二個引數為 static_cast<int>(fs::perms::all)(父目錄必須已存在)。如果 p 已經存在且是目錄,則函式不執行任何操作(此條件不視為錯誤)。
2) 同 (1),但新目錄的屬性從 existing_p(必須是已存在的目錄)複製。複製哪些屬性取決於作業系統:在 POSIX 系統上,屬性的複製方式如同在 Windows 作業系統上,屬性的複製方式如同
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
3) 對 p 中尚不存在的每個元素執行 (1)。
如果發生任何錯誤,非丟擲異常的過載返回 false。
目錄 |
[編輯] 引數
p | - | 要建立的新目錄的路徑 |
existing_p | - | 從中複製屬性的目錄的路徑 |
ec | - | 非丟擲過載中用於錯誤報告的出參 |
[編輯] 返回值
1,2) 如果目錄建立成功,則為 true,否則為 false。
[編輯] 異常
1,3) 不接受 error_code& 引數的過載在底層 OS API 錯誤時丟擲 filesystem_error,構造時以 p 作為第一個引數,OS 錯誤碼作為錯誤碼引數。std::bad_alloc 可能在記憶體分配失敗時丟擲。接受 error_code& 引數的過載在 OS API 呼叫失敗時將其設定為 OS API 錯誤碼,並且在沒有錯誤發生時執行 ec.clear()。此過載具有
noexcept 規範:
noexcept
2) 不接受 error_code& 引數的過載在底層 OS API 錯誤時丟擲 filesystem_error,構造時以 p 作為第一個引數,existing_p 作為第二個引數,OS 錯誤碼作為錯誤碼引數。std::bad_alloc 可能在記憶體分配失敗時丟擲。接受 error_code& 引數的過載在 OS API 呼叫失敗時將其設定為 OS API 錯誤碼,並且在沒有錯誤發生時執行 ec.clear()。此過載具有
noexcept 規範:
noexcept
[編輯] 注意
保留屬性的過載 (2) 在遞迴複製目錄時由 copy() 隱式呼叫。其在 boost.filesystem 中的等效函式是 copy_directory(引數順序相反)。
[編輯] 示例
執行此程式碼
#include <cstdlib> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::create_directories("sandbox/1/2/a"); fs::create_directory("sandbox/1/2/b"); fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all); fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); fs::remove_all("sandbox"); }
可能的輸出
drwxr-xr-x 2 user group 4096 Apr 15 09:33 a drwxr-x--- 2 user group 4096 Apr 15 09:33 b drwxr-x--- 2 user group 4096 Apr 15 09:33 c
[編輯] 參閱
建立符號連結 (函式) | |
複製檔案或目錄 (函式) | |
標識檔案系統許可權 (列舉) |