std::experimental::filesystem:: recursive_directory_iterator
|
ヘッダーで定義
<experimental/filesystem>
|
||
|
class
recursive_directory_iterator
;
|
(filesystem TS) | |
recursive_directory_iterator
は、
LegacyInputIterator
であり、ディレクトリの
directory_entry
要素を反復処理し、さらに再帰的にすべてのサブディレクトリのエントリを反復処理します。反復順序は未規定ですが、各ディレクトリエントリは一度だけ訪問されることが保証されます。
デフォルトではシンボリックリンクは辿られませんが、構築時にディレクトリオプション follow_directory_symlink を指定することで有効化できます。
特別なパス名 dot および dot-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
|
メンバー関数
|
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"
関連項目
|
ディレクトリの内容へのイテレータ
(クラス) |
|
|
ディレクトリエントリ
(クラス) |
|
|
ディレクトリ内容の反復処理オプション
(列挙型) |