std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories
From cppreference.net
<
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)
(1)
を、既に存在しない
p
の各要素に対して実行します。
例外を送出しないオーバーロードは、 エラーが発生した場合に false を返します。
目次 |
パラメータ
| 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
関連項目
|
シンボリックリンクを作成する
(関数) |
|
|
ファイルまたはディレクトリをコピーする
(関数) |
|
|
ファイルシステムのパーミッションを識別する
(列挙型) |