• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <filesystem>

    std::filesystem::create_directory

    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

    処理系