recursive_directory_iterator クラス

ディレクトリ内のファイル名を走査する入力反復子を記述します。反復子は再帰的にサブディレクトリに下ることができます。 反復子 X の場合、式 *X の結果は、ファイル名とそのステータスに関する既知の情報をラップする directory_entry クラスのオブジェクトになります。

詳細およびコード例については、「ファイル システムのナビゲーション (C++)」をご覧ください。

構文

class recursive_directory_iterator;

解説

クラス テンプレートは、以下のものを格納します。

  1. 走査するディレクトリのネストを表す stack<pair<directory_iterator, path>> 型のオブジェクト。ここでは、このオブジェクトに mystack という名前を付けて説明を進めます。

  2. ディレクトリ シーケンス内の現在のファイル名を表すdirectory_entry 型のオブジェクト。ここでは、myentry という名前を付けます。

  3. 再帰的にサブディレクトリに下ることが無効になっているかどうかを記録する bool 型のオブジェクト。ここでは、no_push という名前を付けます。

  4. 構築時に設定されたオプションを記録する directory_options 型のオブジェクト。ここでは、myoptions という名前を付けます。

recursive_directory_iterator型の既定で構築されたオブジェクトは、mystack.top().firstにシーケンス終了反復子を持ち、シーケンスの末尾反復子を表します。 たとえば、abc (ディレクトリ)、def、および def/ghi のエントリを持つディレクトリ jkl がある場合、次のコードは

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

path("abc/def/ghi") 引数と path("abc/jkl") 引数を使用して visit を呼び出します。 次の 2 つの方法でディレクトリ サブツリーの走査の条件を指定できます。

  1. 値が recursive_directory_iterator の directory_options 引数を使って directory_options::follow_directory_symlink を構築した場合にのみ、ディレクトリ symlink がスキャンされます。

  2. disable_recursion_pendingを呼び出した場合、増分中に発生した後続のディレクトリは再帰的にスキャンされません。

コンストラクター

コンストラクター 説明
recursive_directory_iterator recursive_directory_iterator を構築します。

メンバー関数

メンバー関数 説明
depth mystack.size() - 1 を返すため、pval が深さ 0 になります。
disable_recursion_pending true に no_push を格納します。
increment 順番に次のファイル名に進みます。
options myoptions を返します。
pop 反復子を次の下位の深さの次のエントリに移動します。
recursion_pending !no_push を返します。

演算子

演算子 説明
operator!= !(*this == right) を返します。
operator= この既定のメンバー代入演算子は想定どおりに動作します。
operator== trueと *this の両方がシーケンス末尾反復子であるか、両方がシーケンス末尾反復子でない場合にのみ、を返します。
operator* myentry を返します。
operator-> &**this を返します。
operator++ recursive_directory_iterator をインクリメントします。

要件

ヘッダー: <filesystem>

名前 空間:std::filesystem

recursive_directory_iterator::depth

mystack.size() - 1 を返すため、pval が深さ 0 になります。

int depth() const;

recursive_directory_iterator::disable_recursion_pending

true に no_push を格納します。

void disable_recursion_pending();

recursive_directory_iterator::increment

順番に次のファイル名に進みます。

recursive_directory_iterator& increment(error_code& ec);

パラメーター

ec
指定されたエラー コード。

解説

この関数は、ネストされたシーケンス内の次のファイル名に進もうとします。 成功した場合は、myentry にそのファイル名を格納します。成功しなかった場合は、end-of-sequence 反復子を生成します。

recursive_directory_iterator::operator!=

!(*this == right) を返します。

bool operator!=(const recursive_directory_iterator& right) const;

パラメーター

right
比較対象の recursive_directory_iterator。

recursive_directory_iterator::operator=

この既定のメンバー代入演算子は想定どおりに動作します。

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

パラメーター

recursive_directory_iterator
にコピーされる recursive_directory_iterator。

recursive_directory_iterator::operator==

trueと *this の両方がシーケンス末尾反復子であるか、両方がシーケンス末尾反復子でない場合にのみ、を返します。

bool operator==(const recursive_directory_iterator& right) const;

パラメーター

right
比較対象の recursive_directory_iterator。

recursive_directory_iterator::operator*

myentry を返します。

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

&**this を返します。

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

recursive_directory_iterator をインクリメントします。

recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);

パラメーター

int
ダミー引数。 これは、後置インクリメント演算子とプレフィックスインクリメント演算子を区別するためにのみ使用される C++ 規則です。 C++ 標準では、ダミーの int パラメーターを受け取るには、後置形式が必要です。

解説

最初のメンバー関数は increment() を呼び出し、*this を返します。 2 つ目のメンバー関数は、オブジェクトのコピーを作成して、increment() を呼び出してから、そのコピーを返します。

recursive_directory_iterator::options

myoptions を返します。

directory_options options() const;

recursive_directory_iterator::pop

反復子を次の下位の深さの次のエントリに移動します。

void pop();
void pop(error_code& ec);

パラメーター

ec
操作の状態を報告するエラー コード。 ec 引数を受け取るオーバーロードは、例外をスローする代わりに ec でエラーを報告します。

解説

depth() == 0 の場合は、オブジェクトが end-of-sequence 反復子になります。 そうでない場合、メンバー関数は現在の (最も深い) ディレクトリのスキャンを中断し、1 つ下の深さから再開します。

recursive_directory_iterator::recursion_pending

!no_push を返します。

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

recursive_directory_iterator を構築します。

recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval);

recursive_directory_iterator(const path& pval,
    error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
    directory_options opts);

recursive_directory_iterator(const path& pval,
    directory_options opts,
    error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;

パラメーター

pval
指定するパス。

error_code
指定されたエラー コード。

opts
指定されたディレクトリ オプション。

recursive_directory_iterator
構築された recursive_directory_iterator のコピー元となる recursive_directory_iterator。

解説

1 つ目のコンストラクターは、end-of-sequence 反復子を生成します。 2 番目と 3 番目のコンストラクターは、false に no_push、directory_options::none に myoptions を格納してから、pval をディレクトリとして開いて読み取ろうとします。 成功した場合は、ネストされたシーケンスに含まれる、ディレクトリでない 1 つ目のファイル名を指すように mystack と myentry を初期化します。成功しなかった場合は、end-of-sequence 反復子を生成します。

4 つ目と 5 つ目のコンストラクターは、最初に に myoptions を格納することを除いて、2 つ目と 3 つ目のコンストラクターと同じ動作をします。 既定のコンストラクターは想定どおりに動作します。

関連項目

ヘッダー ファイル リファレンス
<filesystem>
ファイル システムのナビゲーション (C++)