<experimental/filesystem> recursive_directory_iterator クラス

Important

この記事では、ISO C++ ファイルシステム技術仕様 (N4100) の標準<experimental/filesystem>実装のrecursive_directory_iterator クラスについて説明します。 この API は、<filesystem>の C++17 recursive_directory_iterator クラスと同じではありません。 noexcept incrementや、オーバーロードのない単一形式のpopなど、さまざまなシグネチャerror_code使用されます。 実験用の実装は、Microsoft Visual C++ (MSVC) 14.51 ツールセットから削除されました。 新しいコードでは、代わりに C++17 recursive_directory_iterator クラスを使用する必要があります。

ディレクトリ内のファイル名を順番に並べ替える入力反復子を記述します。場合によっては、サブディレクトリに再帰的に降順で並べ替えます。 反復子 Xの場合、式 *X は、ファイル名とその状態に関する既知の情報をラップするクラス directory_entry のオブジェクトを返します。

構文

class recursive_directory_iterator;

注釈

クラスには次のものが格納されます。

  1. シーケンスするディレクトリの入れ子を表す、ここでmystack呼び出される、stack<pair<directory_iterator, path>>型のオブジェクト。

  2. ここでmyentry呼び出directory_entry型のオブジェクト。ディレクトリ シーケンス内の現在のファイル名を表します。

  3. ここでno_push呼び出されるbool型のオブジェクト。サブディレクトリへの再帰的な降下が無効になっているかどうかを記録します

  4. ここでmyoptions呼び出されるdirectory_options型のオブジェクト。構築時に設定されたオプションを記録します

recursive_directory_iterator型の既定で構築されたオブジェクトは、mystack.top().firstにシーケンス終了反復子を持ち、シーケンスの末尾反復子を表します。 たとえば、エントリが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を構築した場合にのみスキャンされます。

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

Constructors

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

メンバー関数

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

Operators

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

Requirements

ヘッダー: <experimental/filesystem>

名前 空間:std::experimental::filesystem

recursive_directory_iterator::d epth

mystack.size() - 1を返すので、pvalは深さ 0 になります。

int depth() const;

recursive_directory_iterator::d isable_recursion_pending

no_pushにtrueを格納します。

void disable_recursion_pending();

recursive_directory_iterator::increment

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

recursive_directory_iterator& increment(error_code& ec) noexcept;

パラメーター

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

注釈

この関数は、入れ子になったシーケンス内の次のファイル名に進もうとします。 成功した場合は、そのファイル名が myentryに格納されます。それ以外の場合は、シーケンスの末尾反復子が生成されます。

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&&) = default;

パラメーター

recursive_directory_iterator
recursive_directory_iteratorにコピーされるrecursive_directory_iterator。

recursive_directory_iterator::operator==

*thisと右の両方がシーケンス末尾反復子であるか、両方がシーケンス末尾反復子でない場合にのみ、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
ダミー引数。 これは、後置インクリメント演算子とプレフィックスインクリメント演算子を区別するためにのみ使用される C++ 規則です。 C++ 標準では、ダミーの int パラメーターを受け取るには、後置形式が必要です。

注釈

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

recursive_directory_iterator::options

myoptions を返します。

directory_options options() const;

recursive_directory_iterator::p op

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

void pop();

注釈

depth() == 0場合、オブジェクトはシーケンスの末尾反復子になります。 それ以外の場合、メンバー関数は現在の (最も深い) ディレクトリのスキャンを終了し、次の下位の深さで再開します。

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,
    directory_options opts = directory_options::none);

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

パラメーター

pval
指定したパス。

error_code
指定したエラー コード。

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

recursive_directory_iterator
構築されたrecursive_directory_iteratorがコピーになるrecursive_directory_iterator。

注釈

最初のコンストラクターは、シーケンス末尾反復子を作成します。 2 番目のコンストラクターは、no_pushにfalseを格納し、myoptionsオプトしてから、pval を開いてディレクトリとして読み取ろうとします。 成功した場合は、 mystack を初期化し、入れ子になったシーケンス内の最初のディレクトリ以外のファイル名を指すように myentry します。 失敗した場合は、シーケンス終了反復子が作成されます。

3 番目と 4 番目のコンストラクターは、例外をスローするのではなく ec でエラーを報告することを除き、2 番目と同じように動作します。 4 番目のコンストラクターは、myoptionsにdirectory_options::noneを格納します。 既定のコンストラクターは想定どおりに動作します。

こちらも参照ください

<experimental/filesystem>
directory_entry クラス