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)
}
概要
ディレクトリを作成する。
- (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);
}
出力
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: