std::filesystem::directory_iterator
提供: cppreference.com
< cpp | filesystem
ヘッダ <filesystem> で定義
|
||
class directory_iterator; |
(C++17以上) | |
directory_iterator
はディレクトリの directory_entry 要素をイテレートする LegacyInputIterator です (しかしそのサブディレクトリにはアクセスしません)。 それぞれのディレクトリエントリを一度だけアクセスすることを除き、イテレートする順序は未規定です。 特別なパス名ドットおよびドット-ドットはスキップされます。
directory_iterator
がエラーを報告するか最後のディレクトリエントリを超えて進むと、デフォルト構築されたイテレータ (終端イテレータ) と等しくなります。 2つの終端イテレータは常に等しくなります。 終端イテレータのデクリメントまたはインクリメントは未定義動作です。
ディレクトリイテレータの作成後にディレクトリツリーにファイルまたはディレクトリが追加または削除された場合、その変更がイテレータを通して観察されるかどうかは未規定です。
目次 |
[編集] メンバ型
メンバ型 | 定義 |
value_type
|
std::filesystem::directory_entry |
difference_type
|
std::ptrdiff_t |
pointer
|
const std::filesystem::directory_entry* |
reference
|
const std::filesystem::directory_entry& |
iterator_category
|
std::input_iterator_tag |
[編集] メンバ関数
ディレクトリイテレータを構築します (パブリックメンバ関数) | |
デストラクタ |
デフォルトデストラクタ (パブリックメンバ関数) |
内容を代入します (パブリックメンバ関数) | |
指している先のエントリにアクセスします (パブリックメンバ関数) | |
次のエントリに進みます (パブリックメンバ関数) |
[編集] 非メンバ関数
範囲ベースの for ループサポート (関数) |
さらに、 LegacyInputIterator によって要求される通り、メンバまたは非メンバのいずれかとして、 operator==
および operator!=
が提供されます。
[編集] ノート
ディレクトリトラバーサルのための多くの低水準な OS の API は、次のディレクトリエントリと一緒にそのファイルの属性も取得します。 directory_iterator
のコンストラクタおよび非 const メンバ関数は、 directory_entry::refresh を呼ばすに、指す先の directory_entry にこれらの属性 (もしあれば) を格納します。 これにより、追加のシステムコールを発行することなく、反復中のディレクトリエントリの属性を調べられます。
[編集] 例
Run this code
#include <fstream> #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/a/b"); std::ofstream("sandbox/file1.txt"); std::ofstream("sandbox/file2.txt"); for(auto& p: fs::directory_iterator("sandbox")) std::cout << p.path() << '\n'; fs::remove_all("sandbox"); }
出力例:
"sandbox/a" "sandbox/file1.txt" "sandbox/file2.txt"
[編集] 関連項目
(C++17) |
ディレクトリとそのサブディレクトリの内容のイテレータ (クラス) |
(C++17) |
ディレクトリ内容のイテレートのためのオプション (列挙) |
(C++17) |
ディレクトリエントリ (クラス) |