最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<filesystem>

# std::filesystem::remove_all(C++17)

    namespace std::filesystem {
      std::uintmax_t remove_all(const path& p);                      // (1)
      std::uintmax_t remove_all(const path& p, std::error_code& ec); // (2)
    }

## 概要

再帰的にファイル・ディレクトリを削除する。

`remove()`関数では、環境によって空でないディレクトリを削除できない場合があるため、空でないディレクトリを削除するために、本関数を使用する。

## 効果

- パス`p`のコンテンツを、再帰的に削除する
- POSIX環境では、それぞれのコンテンツの削除に、`remove()`関数を使用する

## 戻り値

削除されたファイルの数が返る

## 例外

- (1) : ファイルシステムがエラーを報告する場合がある。エラーが発生した場合は、`std::filesystem::filesystem_error` 例外を送出する
- (2) : ディレクトリを走査する際にメモリ確保に失敗した場合、例外を送出する可能性がある

## 例

    #include <cassert>
    #include <filesystem>
    #include <fstream>

    namespace fs = std::filesystem;

    int main()
    {
      std::ofstream{"regular.txt"};
      fs::create_directory("empty_dir");
      fs::create_directory("non_empty_dir");
      std::ofstream{"non_empty_dir/file_in_dir.txt"};

      // 単一ファイルを削除
      fs::remove_all("regular.txt");

      // 空、および非空のディレクトリを削除
      fs::remove_all("empty_dir");
      fs::remove_all("non_empty_dir");

      // 存在しないファイルを削除。
      // エラーにはならず、0が返る
      std::uintmax_t result = fs::remove_all("not_exist.file");
      assert(result == 0);

      assert(!fs::exists("regular.txt"));
      assert(!fs::exists("empty_dir"));
      assert(!fs::exists("non_empty_dir"));
    }

### 出力

## バージョン

### 言語

- C++17

### 処理系

- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++:

## 参照

- LWG Issue 3014. More `noexcept` issues with filesystem operations