Namespaces
Variants

std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories

From cppreference.net
ヘッダーで定義 <experimental/filesystem>
bool create_directory ( const path & p ) ;
bool create_directory ( const path & p, error_code & ec ) ;
(1) (filesystem TS)
bool create_directory ( const path & p, const path & existing_p ) ;
bool create_directory ( const path & p, const path & existing_p, error_code & ec ) ;
(2) (filesystem TS)
bool create_directories ( const path & p ) ;
bool create_directories ( const path & p, error_code & ec ) ;
(3) (filesystem TS)
1) ディレクトリ p をPOSIXの mkdir() を用いて、第二引数に static_cast < int > ( fs :: perms :: all ) を指定して作成する(親ディレクトリは既に存在している必要がある)。 p が既に存在し、かつ既にディレクトリである場合、関数は何も行わない(この状態はエラーとして扱われない)。
2) (1) と同様ですが、新しいディレクトリの属性は existing_p からコピーされます(既存のディレクトリでなければなりません)。どの属性がコピーされるかはOS依存です:POSIXシステムでは、以下のようにして属性がコピーされます
stat(existing_p.c_str(), &attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
Windows OSでは、以下のようにして属性がコピーされます
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
3) (1) を、既に存在しない p の各要素に対して実行します。

例外を送出しないオーバーロードは、 エラーが発生した場合に false を返します。

目次

翻訳内容: - 「Contents」→「目次」 - その他のC++関連用語(Parameters、Return value、Exceptions、Notes、Example、See also)は原文のまま保持 - HTMLタグ、属性、クラス名、ID、リンク先はすべて変更なし - 番号部分もそのまま保持

パラメータ

p - 作成する新しいディレクトリへのパス
existing_p - 属性をコピーする元ディレクトリへのパス
ec - 例外を送出しないオーバーロードでのエラー報告用出力パラメータ

戻り値

1,2) true ディレクトリの作成が成功した場合、 false それ以外の場合。

例外

1,3) error_code & パラメータを取らないオーバーロードは、基盤OS APIエラーが発生した場合に filesystem_error をスローします。この例外は p を第一引数、OSエラーコードをエラーコード引数として構築されます。 std:: bad_alloc はメモリ確保が失敗した場合にスローされる可能性があります。 error_code & パラメータを取るオーバーロードは、OS API呼び出しが失敗した場合にそれをOS APIエラーコードに設定し、エラーが発生しなかった場合は ec. clear ( ) を実行します。このオーバーロードは
noexcept 指定子を持ちます:
noexcept
2) error_code & パラメータを取らないオーバーロードは、基盤となるOS APIエラーが発生した場合に filesystem_error をスローします。この例外は p を第1引数、 existing_p を第2引数、OSエラーコードをエラーコード引数として構築されます。 std:: bad_alloc はメモリ割り当てが失敗した場合にスローされる可能性があります。 error_code & パラメータを取るオーバーロードは、OS API呼び出しが失敗した場合にそれをOS APIエラーコードに設定し、エラーが発生しなかった場合は ec. clear ( ) を実行します。このオーバーロードは
noexcept 指定子を持ちます:
noexcept

注記

属性保持オーバーロード (2) は、ディレクトリを再帰的にコピーする際に copy() によって暗黙的に呼び出されます。boost.filesystemにおける同等の機能は copy_directory (引数の順序が逆になっています)。

#include <cstdlib>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/1/2/a");
    fs::create_directory("sandbox/1/2/b");
    fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all);
    fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b");
    std::system("ls -l sandbox/1/2");
    fs::remove_all("sandbox");
}

出力例:

drwxr-xr-x 2 user group 4096 Apr 15 09:33 a
drwxr-x--- 2 user group 4096 Apr 15 09:33 b
drwxr-x--- 2 user group 4096 Apr 15 09:33 c

関連項目

シンボリックリンクを作成する
(関数)
ファイルまたはディレクトリをコピーする
(関数)
ファイルシステムのパーミッションを識別する
(列挙型)