recursive_directory_iterator クラス
ディレクトリ内のファイル名を走査する入力反復子を記述します。反復子は再帰的にサブディレクトリに下ることができます。 反復子 X
の場合、式 *X
の結果は、ファイル名とそのステータスに関する既知の情報をラップする directory_entry
クラスのオブジェクトになります。
詳細およびコード例については、「ファイル システムのナビゲーション (C++)」をご覧ください。
構文
class recursive_directory_iterator;
解説
クラス テンプレートは、以下のものを格納します。
走査するディレクトリのネストを表す
stack<pair<directory_iterator, path>>
型のオブジェクト。ここでは、このオブジェクトにmystack
という名前を付けて説明を進めます。ディレクトリ シーケンス内の現在のファイル名を表す
directory_entry
型のオブジェクト。ここでは、myentry
という名前を付けます。再帰的にサブディレクトリに下ることが無効になっているかどうかを記録する
bool
型のオブジェクト。ここでは、no_push
という名前を付けます。構築時に設定されたオプションを記録する
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 つの方法でディレクトリ サブツリーの走査の条件を指定できます。
値が
directory_options::follow_directory_symlink
のdirectory_options
引数を使ってrecursive_directory_iterator
を構築した場合にのみ、ディレクトリ symlink がスキャンされます。disable_recursion_pending
を呼び出した場合、増分中に発生した後続のディレクトリは再帰的にスキャンされません。
コンストラクター
コンストラクター | 説明 |
---|---|
recursive_directory_iterator | recursive_directory_iterator を構築します。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
depth | mystack.size() - 1 を返すため、pval が深さ 0 になります。 |
disable_recursion_pending | no_push に true を格納します。 |
increment | 順番に次のファイル名に進みます。 |
options | myoptions を返します。 |
pop | 次のオブジェクトを返します。 |
recursion_pending | !no_push を返します。 |
演算子
演算子 | 説明 |
---|---|
operator!= | !(*this == right) を返します。 |
operator= | この既定のメンバー代入演算子は想定どおりに動作します。 |
operator== | *this と right の両方がシーケンス末尾反復子であるか、両方がシーケンス末尾反復子でない場合にのみ、true を返します。 |
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_push
に true
を格納します。
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==
*this
と right の両方がシーケンス末尾反復子であるか、両方がシーケンス末尾反復子でない場合にのみ、true
を返します。
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_push
に false
、myoptions
に directory_options::none
を格納してから、pval をディレクトリとして開いて読み取ろうとします。 成功した場合は、ネストされたシーケンスに含まれる、ディレクトリでない 1 つ目のファイル名を指すように mystack
と myentry
を初期化します。成功しなかった場合は、end-of-sequence 反復子を生成します。
4 つ目と 5 つ目のコンストラクターは、最初に myoptions
に opts を格納することを除いて、2 つ目と 3 つ目のコンストラクターと同じ動作をします。 既定のコンストラクターは想定どおりに動作します。