名前空間
変種
操作

std::filesystem::directory_iterator

提供: cppreference.com
 
 
 
 
ヘッダ <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

[編集] メンバ関数

ディレクトリイテレータを構築します
(パブリックメンバ関数) [edit]
デストラクタ
デフォルトデストラクタ
(パブリックメンバ関数) [edit]
内容を代入します
(パブリックメンバ関数) [edit]
指している先のエントリにアクセスします
(パブリックメンバ関数) [edit]
次のエントリに進みます
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

範囲ベースの for ループサポート
(関数) [edit]

さらに、 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"

[編集] 関連項目

ディレクトリとそのサブディレクトリの内容のイテレータ
(クラス) [edit]
ディレクトリ内容のイテレートのためのオプション
(列挙) [edit]
ディレクトリエントリ
(クラス) [edit]