- filesystem[meta header]
- std::filesystem[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std::filesystem {
bool create_directory(const path& p); // (1)
bool create_directory(const path& p, std::error_code& ec) noexcept; // (2)
bool create_directory(const path& p, const path& existing_p); // (3)
bool create_directory(const path& p, const path& existing_p,
std::error_code& ec) noexcept; // (4)
}
- path[link path.md]
ディレクトリを作成する。
- (1), (2) : パス
p
で指定された単一のディレクトリを作成する - (3), (4) : パス
existing_p
の属性 (権限, 圧縮、暗号化など) を引き継いで、パスp
で指定された単一のディレクトリを作成する
- (1), (2) : パス
p
のディレクトリを作成する- POSIX環境では、
mkdir()
関数に、第2引数に権限としてstatic_cast<int>(
perms::all
)
を指定して実行する - (2) では、OSのファイルシステムAPIによってエラーが報告された場合、
ec
にエラー情報が設定される。そうでなければ、ec.clear()
を呼び出し、エラー情報をクリアする
- POSIX環境では、
- (3), (4) : パス
existing_p
の属性を取得し、その属性を付加してパスp
のディレクトリを作成する
- (1), (3) : 新たなディレクトリが作成されたら
true
、されなければfalse
が返る - (2), (4) : 新たなディレクトリが作成されたら
true
、されなければfalse
が返る。エラーが発生した場合もfalse
が返る
- (1), (3) : ファイルシステムがエラーを報告する場合がある。エラーが発生した場合は、
std::filesystem::filesystem_error
例外を送出する - (2), (4) : 投げない
- 作成するディレクトリとして
"a/b/c"
を指定した場合、a/b
ディレクトリがなければ、この関数はエラーとなる。ディレクトリ階層を作成する場合は、create_directories()
関数を使用すること
#include <cassert>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
bool result = fs::create_directory("dir");
assert(result);
assert(fs::exists("dir"));
assert(fs::is_directory("dir"));
// すでに存在するディレクトリを指定した場合、falseは返るがエラーにはならない
bool result2 = fs::create_directory("dir");
assert(!result2);
}
- fs::create_directory[color ff0000]
- fs::exists[link exists.md]
- fs::is_directory[link is_directory.md]
- C++17
- Clang: 7.0 [mark verified]
- GCC: 8.1 [mark verified]
- Visual C++: