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_entry のオブジェクトは、mystack.top().first に end-of-sequence 反復子を持ち、end-of-sequence 反復子を表します。 たとえば、def (ディレクトリ)、def/ghi、および jkl のエントリを持つディレクトリ abc がある場合、次のコードは

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

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

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

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

コンストラクター

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

メンバー関数

メンバー関数 説明
depth mystack.size() - 1 を返すため、pval が深さ 0 になります。
disable_recursion_pending no_pushtrue を格納します。
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::tr2::sys

recursive_directory_iterator::depth

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

int depth() const;

recursive_directory_iterator::disable_recursion_pending

no_pushtrue を格納します。

void disable_recursion_pending();

recursive_directory_iterator::increment

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

recursive_directory_iterator& increment(error_code& ec) noexcept;

パラメーター

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

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
指定したインクリメント。

解説

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

recursive_directory_iterator::options

myoptions を返します。

directory_options options() const;

recursive_directory_iterator::pop

次のオブジェクトを返します。

void pop();

解説

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

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

関連項目

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