最終更新日時(UTC):
が更新

履歴 編集

function
<filesystem>

std::filesystem::create_directory(C++17)

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()を呼び出し、エラー情報をクリアする
  • (3), (4) : パスexisting_pの属性を取得し、その属性を付加してパスpのディレクトリを作成する
    • POSIX環境では、stat(existing_p.c_str(), &attributes_stat)の呼び出し後に、mkdir(p.c_str(), attributes_stat.st_mode)の呼び出しでディレクトリを作成する
    • Windows環境では、CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)を呼び出す

戻り値

  • (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

処理系