Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
ヘッダーで定義 <experimental/filesystem>
class recursive_directory_iterator ;
(filesystem TS)

recursive_directory_iterator は、 LegacyInputIterator であり、ディレクトリの directory_entry 要素を反復処理し、さらに再帰的にすべてのサブディレクトリのエントリを反復処理します。反復順序は未規定ですが、各ディレクトリエントリは一度だけ訪問されることが保証されます。

デフォルトではシンボリックリンクは辿られませんが、構築時にディレクトリオプション follow_directory_symlink を指定することで有効化できます。

特別なパス名 dot および dot-dot はスキップされます。

recursive_directory_iterator が最上位ディレクトリの最後のディレクトリエントリを過ぎて進められると、デフォルト構築されたイテレータ(終端イテレータとも呼ばれる)と等しくなります。2つの終端イテレータは常に等しく、終端イテレータのデリファレンスまたはインクリメントは未定義動作です。

再帰的ディレクトリイテレータが作成された後に、ファイルやディレクトリがディレクトリツリーから削除または追加された場合、その変更がイテレータを通じて観測されるかどうかは未規定です。

ディレクトリ構造に循環が含まれている場合、終端イテレータに到達できない可能性があります。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Member types、Member functions、Observers、Modifiers、Non-member functions、Notes、Example、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や構造は完全に保持されています

メンバー型

メンバー型 定義
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const filesystem::directory_entry*
reference const filesystem::directory_entry&
iterator_category std::input_iterator_tag

メンバー関数

recursive directory iteratorを構築する
(public member function)
(destructor)
デフォルトデストラクタ
(public member function)
Observers
指し示すエントリにアクセスする
(public member function)
反復処理に影響する現在アクティブなオプションを返す
(public member function)
現在の再帰深度を返す
(public member function)
現在のディレクトリに対して再帰が無効化されているかチェックする
(public member function)
Modifiers
内容を代入する
(public member function)
次のエントリに進む
(public member function)
ディレクトリ階層で1レベル上にイテレータを移動する
(public member function)
次のインクリメントまで再帰を無効化する
(public member function)

非メンバー関数

範囲ベースforループサポート
(関数)

さらに、 operator== および operator!= が、 LegacyInputIterator の要件に従って、メンバーまたは非メンバーとして提供されます。

注記

A recursive_directory_iterator は通常、参照カウント方式の pointer LegacyInputIterator のシャローコピーセマンティクスを満たすため)を保持し、これは以下のものを保持する実装オブジェクトを指します:

  • 再帰スタックを形成する非再帰 directory_iterator のコンテナ(例: std::vector )。
  • 再帰深度カウンタ( depth() でアクセス可能)。
  • 構築時に使用されたディレクトリオプション( options() でアクセス可能)。
  • 保留中の再帰フラグ( recursion_pending() でアクセス可能、ディレクトリオプションと組み合わせて領域を節約できる場合がある)。

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox"))
        std::cout << entry << '\n';
    fs::remove_all("sandbox");
}

出力例:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

関連項目

ディレクトリの内容へのイテレータ
(クラス)
ディレクトリエントリ
(クラス)
ディレクトリ内容の反復処理オプション
(列挙型)