std::filesystem::directory_iterator - cppreference.com
提供: cppreference.com
<tbody> </tbody>
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 |
メンバ関数
非メンバ関数
さらに、 LegacyInputIterator によって要求される通り、メンバまたは非メンバのいずれかとして、 operator== および operator!= が提供されます。
ノート
ディレクトリトラバーサルのための多くの低水準な OS の API は、次のディレクトリエントリと一緒にそのファイルの属性も取得します。 directory_iterator のコンストラクタおよび非 const メンバ関数は、 directory_entry::refresh を呼ばすに、指す先の directory_entry にこれらの属性 (もしあれば) を格納します。 これにより、追加のシステムコールを発行することなく、反復中のディレクトリエントリの属性を調べられます。
例
#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"