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

履歴 編集

class
<filesystem>

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

    namespace std::filesystem {
      class directory_iterator;
    }

## 概要

`directory_iterator`は、ディレクトリ内を走査する入力イテレータクラスである。

このイテレータは指定されたディレクトリ内のファイルを走査するが、ディレクトリ内のディレクトリをさらに走査はしない。再帰的にディレクトリを走査する場合は、`std::filesystem::recursive_directory_iterator`クラスを使用する。

ファイルの走査順序は未規定であり、ファイル名の辞書順に走査される保証はない。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++17
`~directory_iterator();` | デストラクタ | C++17
`operator=` | 代入演算子 | C++17
`operator*` | 間接参照演算子 | C++17
`operator->` | メンバアクセス演算子 | C++17
`operator++` | イテレータを進める | C++17
`increment` | イテレータを進める | C++17

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`iterator_category` | イテレータ種別 `input_iterator_tag` | C++17
`value_type` | 要素型 `directory_entry` | C++17
`difference_type` | イテレータの差を表す符号付き整数型 `std::ptrdiff_t` | C++17
`pointer` | 要素へのポインタ型 `const directory_entry*` | C++17
`reference` | 要素へのポインタ型 `const directory_entry&` | C++17

## 非メンバ関数

### イテレータ範囲

名前 | 説明 | 対応バージョン
--- | --- | ---
`begin` | 先頭要素へのイテレータを取得する | C++17
`end` | 最後尾要素の次を指すイテレータを取得する | C++17

### 比較演算子

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較 | C++17
`operator!=` | 非等値比較 | C++17

## 例

    #include <iostream>
    #include <filesystem>
    #include <fstream>

    namespace fs = std::filesystem;

    int main()
    {
      fs::create_directory("dir_a");
      std::ofstream{"dir_a/a.txt"};

      fs::create_directory("dir_a/dir_b");
      std::ofstream{"dir_a/dir_b/b.txt"};

      // dir_aディレクトリ直下に含まれる全ファイル・ディレクトリを出力
      for (const fs::directory_entry& x : fs::directory_iterator("dir_a")) {
        std::cout << x.path() << std::endl;
      }
    }

### 出力例

    "dir_a/a.txt"
    "dir_a/dir_b"

## バージョン

### 言語

- C++17

### 処理系

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