std::filesystem:: remove, std::filesystem:: remove_all
From ja.cppreference.net
<
cpp
|
filesystem
|
定義済みヘッダー
<filesystem>
|
||
|
bool
remove
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (C++17以降) |
|
bool
remove
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (C++17以降) |
|
std::
uintmax_t
remove_all
(
const
std::
filesystem
::
path
&
p
)
;
|
(3) | (C++17以降) |
|
std::
uintmax_t
remove_all
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(4) | (C++17以降) |
1,2)
パス
p
によって特定されるファイルまたは空ディレクトリは、POSIXの
remove
によって削除されます。シンボリックリンクは追従されません(リンク先ではなくシンボリックリンク自体が削除されます)。
3,4)
ディレクトリである場合、
p
の内容とそのすべてのサブディレクトリの内容を再帰的に削除し、その後POSIXの
remove
を繰り返し適用するように
p
自体を削除します。シンボリックリンクは追従されません(シンボリックリンク自体が削除され、そのターゲットは削除されません)。
目次 |
パラメータ
| p | - | 削除するパス |
| ec | - | 例外を投げないオーバーロードにおけるエラー報告用の出力パラメータ |
戻り値
1,2)
true
ファイルが削除された場合は、
false
ファイルが存在しなかった場合。
error_code&
引数を取るオーバーロードは、エラー時に
false
を返します。
3,4)
削除されたファイルとディレクトリの数を返す(
p
が最初から存在しなかった場合はゼロとなる可能性がある)。
error_code&
引数を取るオーバーロードは、エラー時に
static_cast
<
std::
uintmax_t
>
(
-
1
)
を返す。
例外
noexceptでマークされていないオーバーロードは、
メモリ確保に失敗した場合に
std::bad_alloc
をスローする可能性があります。
1,3)
基盤となるOS APIエラーが発生した場合
std::filesystem::filesystem_error
をスローします。この例外は
p
を第一パス引数、OSエラーコードをエラーコード引数として構築されます。
2,4)
OS API呼び出しが失敗した場合、
std::
error_code
&
パラメータをOS APIエラーコードに設定し、エラーが発生しなかった場合は
ec.
clear
(
)
を実行する。
注記
POSIXシステムでは、この関数は通常
unlink
および
rmdir
を必要に応じて呼び出し、Windowsでは
DeleteFileW
および
RemoveDirectoryW
を呼び出します。
p が存在しない場合、この関数は false を返し、エラーを報告しません。
例
このコードを実行
#include <cstdint> #include <filesystem> #include <fstream> #include <iostream> int main() { namespace fs = std::filesystem; std::cout << std::boolalpha; fs::path tmp{std::filesystem::temp_directory_path()}; const auto O_O{"O_O"}; std::ofstream{tmp / O_O} << O_O; // O_Oを含むファイルを作成 std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // 成功 std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // 失敗 std::filesystem::create_directories(tmp / "abcdef/example"); const std::uintmax_t n{fs::remove_all(tmp / "abcdef")}; std::cout << "remove_all(): " << n << " files or directories\n"; }
出力例:
remove(): true remove(): false remove_all(): 2 files or directories
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3014 | C++17 |
error_code
オーバーロードの
remove_all
はnoexceptとマークされているがメモリを割り当てる可能性がある
|
noexceptを削除 |
関連項目
|
ファイルを削除する
(関数) |