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++: