名前空間
変種
操作

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

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
ヘッダー <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) pの要素のうち、まだ存在しないものすべてに対して(1)を実行します。

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

目次

[編集] Parameters

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

[編集] Return value

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

[編集] Exceptions

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

[編集] Notes

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

[編集] Example

#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

[編集] See also

シンボリックリンクを作成する
(関数) [編集]
ファイルまたはディレクトリをコピーする
(関数) [編集]
ファイルシステムのパーミッションを識別する
(列挙型) [編集]
English 日本語 中文(简体) 中文(繁體)