名前空間
変種
操作

std::experimental::filesystem::recursive_directory_iterator

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
 
ヘッダー <experimental/filesystem> で定義されています
class recursive_directory_iterator;
(filesystem TS)

recursive_directory_iterator は、ディレクトリのエントリ(directory_entry)および、再帰的にすべてのサブディレクトリのエントリを走査する LegacyInputIterator です。走査順序は未指定ですが、各ディレクトリエントリは一度だけ訪問されます。

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

特殊なパス名である dotdot-dot はスキップされます。

recursive_directory_iterator がトップレベルディレクトリの最後のディレクトリエントリを過ぎて進むと、デフォルト構築されたイテレータ(エンドイテレータとも呼ばれます)と等しくなります。2つのエンドイテレータは常に等しく、エンドイテレータの逆参照やインクリメントは未定義の動作です。

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

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

目次

[編集] メンバ型

メンバ型 定義
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

[編集] メンバ関数

再帰ディレクトリイテレータを構築します
(public member function) [編集]
(デストラクタ)
デフォルト デストラクタ
(public member function) [編集]
監視
指しているエントリにアクセスします
(public member function) [編集]
現在アクティブな、走査に影響するオプションを返します
(public member function) [編集]
現在の再帰深度を返します
(public member function) [編集]
現在のディレクトリの再帰が無効になっているかどうかをチェックします
(public member function) [編集]
変更
内容を代入する
(public member function) [編集]
次のエントリに進みます
(public member function) [編集]
イテレータをディレクトリ階層で1レベル上に移動させます
(public member function) [編集]
次のインクリメントまで再帰を無効にします
(public member function) [編集]

[編集] 非メンバ関数

範囲ベース for ループのサポート
(function) [編集]

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

[編集] 注記

recursive_directory_iterator は通常、参照カウントされた「ポインタ」(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"

[編集] 関連項目

ディレクトリの内容を指すイテレータ
(クラス) [編集]
ディレクトリエントリ
(クラス) [編集]
ディレクトリの内容をイテレートするためのオプション
(列挙型) [編集]
English 日本語 中文(简体) 中文(繁體)