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システムでは、属性は次のようにコピーされます。Windows OSでは、属性は次のようにコピーされます。
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
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
| シンボリックリンクを作成する (関数) | |
| ファイルまたはディレクトリをコピーする (関数) | |
| ファイルシステムのパーミッションを識別する (列挙型) |