Namespaces
Variants

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

From ja.cppreference.net
定義済みヘッダー <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以降)
(3) (C++17以降)
(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を削除

関連項目

ファイルを削除する
(関数)