std::filesystem:: create_directory, std::filesystem:: create_directories
|
ヘッダーで定義
<filesystem>
|
||
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (C++17以降) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (C++17以降) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const std:: filesystem :: path & existing_p ) ; |
(3) | (C++17以降) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const
std::
filesystem
::
path
&
existing_p,
|
(4) | (C++17以降) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p
)
;
|
(5) | (C++17以降) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(6) | (C++17以降) |
mkdir()
を使用して、第2引数に
static_cast
<
int
>
(
std::
filesystem
::
perms
::
all
)
を指定したかのように作成する(親ディレクトリは既に存在している必要がある)。
p
が既存のディレクトリを指しているために関数が失敗した場合、エラーは報告されない。それ以外の失敗の場合にはエラーが報告される。
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
目次 |
パラメータ
| p | - | 作成する新しいディレクトリへのパス |
| existing_p | - | 属性をコピーする元ディレクトリへのパス |
| ec | - | 例外を投げないオーバーロードでのエラー報告用出力パラメータ |
戻り値
true ディレクトリ p が解決する先のディレクトリが新しく作成された場合、 false それ以外の場合。
例外
noexcept
でマークされていないオーバーロードは、
メモリ確保に失敗した場合
std::bad_alloc
をスローする可能性があります。
注記
属性保持オーバーロード
(3,4)
は、
copy()
がディレクトリを再帰的にコピーする際に暗黙的に呼び出されます。boost.filesystemにおける同等の機能は
copy_directory
(引数の順序が逆になっています)です。
例
#include <cassert> #include <cstdlib> #include <filesystem> int main() { std::filesystem::current_path(std::filesystem::temp_directory_path()); // 基本的な使用法 std::filesystem::create_directories("sandbox/1/2/a"); std::filesystem::create_directory("sandbox/1/2/b"); // ディレクトリは既に存在する(falseが返され、エラーは発生しない) assert(!std::filesystem::create_directory("sandbox/1/2/b")); // パーミッションのコピー使用法 std::filesystem::permissions( "sandbox/1/2/b", std::filesystem::perms::others_all, std::filesystem::perm_options::remove ); std::filesystem::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); std::system("tree sandbox"); std::filesystem::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
sandbox
└── 1
└── 2
├── a
├── b
└── c
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2935 | C++17 | ターゲットが既に存在するがディレクトリでない場合にエラー | エラーではない |
| LWG 3014 | C++17 |
error_code
オーバーロードの
create_directories
がnoexceptだがメモリを確保可能
|
noexceptを削除 |
| P1164R1 | C++17 | 既存の非ディレクトリファイルによる作成失敗はエラーではない | エラーに変更 |
関連項目
|
(C++17)
(C++17)
|
シンボリックリンクを作成する
(関数) |
|
(C++17)
|
ファイルまたはディレクトリをコピーする
(関数) |
|
(C++17)
|
ファイルシステムのパーミッションを識別する
(列挙型) |