名前空間
変種
操作

std::filesystem::remove, std::filesystem::remove_all

提供: cppreference.com
 
 
 
ヘッダ <filesystem> で定義
bool remove(const std::filesystem::path& p);
bool remove(const std::filesystem::path& p, std::error_code& ec) noexcept;
(1) (C++17以上)
(2) (C++17以上)
1) POSIX の remove によって行われたかのように、パス p の指すファイルまたは空ディレクトリが削除されます。 シンボリックリンクは辿られません (ターゲットではなくシンボリックリンクが削除されます)。
2) POSIX の remove を繰り返し適用したかのように、 p の内容とそのすべてのサブディレクトリの内容を再帰的に削除し (ディレクトリの場合)、その後 p 自身を削除します。 シンボリックリンクは辿られません (ターゲットではなくシンボリックリンクが削除されます)。

目次

[編集] 引数

p - 削除するパス
ec - 例外を投げないオーバーロードでエラーを報告するための出力引数

[編集] 戻り値

1) ファイルが削除された場合は true、存在しなかった場合は falseerror_code& 引数を取るオーバーロードは、エラーが発生した場合、 false を返します。
2) 削除されたファイルとディレクトリの数 (p が元から存在しなければ、ゼロになるかもしれません)。 error_code& 引数を取るオーバーロードは、エラーが発生した場合、 static_cast<std::uintmax_t>(-1) を返します。

[編集] 例外

std::error_code& 引数を取らないオーバーロードは、ベースとなる OS の API でエラーが発生した場合、第1パス引数に p、エラーコード引数に OS のエラーコードを指定して構築された filesystem_error を投げます。 std::error_code& 引数を取るオーバーロードは、 OS の API 呼び出しが失敗した場合、その引数を OS の API のエラーコードに設定し、エラーが発生しない場合は ec.clear() を実行します。 noexcept 指定のないあらゆるオーバーロードは、メモリ確保に失敗した場合 std::bad_alloc を投げる可能性があります。

[編集] ノート

POSIX システムでは、この関数は一般的に、必要に応じて unlinkrmdir を呼びます。 Windows では、 RemoveDirectoryWDeleteFileW を呼びます。

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 3014 C++17 error_code overload of remove_all marked noexcept but can allocate memory noexcept removed

[編集]

#include <iostream>
#include <cstdint>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    fs::path dir = fs::temp_directory_path();
    fs::create_directories(dir / "abcdef/example");
    std::uintmax_t n = fs::remove_all(dir / "abcdef");
    std::cout << "Deleted " << n << " files or directories\n";
}

出力例:

Deleted 2 files or directories

[編集] 関連項目

ファイルを消去します
(関数) [edit]