QDirListing Class
QDirListing クラスは、ディレクトリエントリ用の STL スタイルのイテレータを提供します。詳細...
| ヘッダー: | #include <QDirListing> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 以下のように: | Qt 6.8 以降 |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QDirListingは、入出力およびネットワーク機能の一部です。
パブリック型
| class | DirEntry |
(since 6.8) class | const_iterator |
(since 6.8) class | sentinel |
| enum class | IteratorFlag { Default, ExcludeFiles, ExcludeDirs, ExcludeOther, ResolveSymlinks, …, FollowDirSymlinks } |
| flags | IteratorFlags |
パブリック関数
| QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default) | |
| QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default) | |
| QDirListing(QDirListing &&other) | |
| ~QDirListing() | |
| QDirListing::const_iterator | begin() const |
| QDirListing::const_iterator | cbegin() const |
| QDirListing::sentinel | cend() const |
| QDirListing::sentinel | end() const |
| QDirListing::IteratorFlags | iteratorFlags() const |
| QString | iteratorPath() const |
| QStringList | nameFilters() const |
| QDirListing & | operator=(QDirListing &&other) |
詳細な説明
QDirListing を使用すると、ディレクトリ内のエントリを 1 つずつ順に閲覧することができます。 これはQDir::entryList()やQDir::entryInfoList()と似ていますが、エントリを一度にすべてではなく1つずつ一覧表示するため、スケーラビリティに優れており、大規模なディレクトリに適しています。また、ディレクトリの内容を再帰的に一覧表示したり、シンボリックリンクを追跡したりすることもサポートしています。QDir::entryList()とは異なり、QDirListingはソート機能をサポートしていません。
QDirListing のコンストラクタは、引数としてディレクトリパスの文字列を受け取ります。すべてのエントリを再帰的に反復処理する方法は以下の通りです:
usingItFlag=QDirListing::IteratorFlag;
for(const auto &dirEntry: QDirListing(u"/etc"_s,ItFlag::Recursive)) {
qDebug() << dirEntry.filePath();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}名前でフィルタリングしたすべての通常ファイルを再帰的に検索して読み込む方法は次のとおりです:
F=QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s,QStringList{u"scaling_cur_freq"_s},F::FilesOnly|F::Recursive);
for(const auto &dirEntry: dirList) {
QFile f(dirEntry.filePath());
if(f.open(QIODevice::ReadOnly))
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}以下に、通常のファイルのみを再帰的に一覧表示する方法を示します:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive;
for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) {
// ...
}通常のファイルと、通常のファイルへのシンボリックリンクのみを再帰的に一覧表示する方法は次のとおりです:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive | F::ResolveSymlinks;
for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) {
// ...
}QDirListing::const_iterator これは C++20 のstd::input_iterator を実装しており、つまり、移動専用、前方専用、シングルパス型のイテレータであり、ランダムアクセスは許可されません。range-for ループ(またはランダムアクセスイテレータを必要としない C++20 の範囲アルゴリズム)で使用できます。 有効なイテレータを間接参照すると、QDirListing::DirEntry オブジェクトが返されます。(c)end() というセンチネルは、反復処理の終了位置を示します。sentinel と等しいイテレータを間接参照すると、未定義の挙動となります。
QDirListing::DirEntry は、QFileInfo のAPIの一部(例:fileName()、filePath()、exists())を提供します。内部的には、DirEntry は必要な場合、つまり他のシステム関数によって情報がまだ取得されていない場合にのみ、QFileInfo オブジェクトを生成します。DirEntry::fileInfo()を使用すると、QFileInfo を取得できます。例:
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) {
// Faster
if (dirEntry.fileName().endsWith(u".conf")) { /* ... */ }
// This works, but might be potentially slower, since it has to construct a
// QFileInfo, whereas (depending on the implementation) the fileName could
// be known already
if (dirEntry.fileInfo().fileName().endsWith(u".conf")) { /* ... */ }
}
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) {
// Both approaches are the same, because DirEntry will have to construct
// a QFileInfo to get this info (for example, by calling system stat())
if (dirEntry.size() >= 4'000 /* 4KB */) { /* ...*/ }
if (dirEntry.fileInfo().size() >= 4'000 /* 4KB */) { /* ... */ }
}QDir およびQDir::entryList()も参照してください 。
メンバ型のドキュメント
enum class QDirListing::IteratorFlag
flags QDirListing::IteratorFlags
この列挙型クラスは、QDirListing の動作を設定するために使用できるフラグを定義しています。この列挙型の値は、ビット単位のOR演算で組み合わせることができます。
| 定数 | 値 | 説明 |
|---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | すべてのエントリ、すなわちファイル、ディレクトリ、シンボリックリンク(ターゲットが存在しない破損したシンボリックリンクを含む)、および特殊(その他の)システムファイルを一覧表示します。詳細については、ExcludeOther を参照してください。隠しファイルや隠しディレクトリ、および特殊エントリである. と.. は、デフォルトでは一覧表示されません。 |
QDirListing::IteratorFlag::ExcludeFiles | 0x000004 | 通常のファイルは一覧表示しない。ResolveSymlinks と組み合わせた場合、通常のファイルへのシンボリックリンクも除外される。 |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | ディレクトリは一覧に含めない。ResolveSymlinks と組み合わせると、ディレクトリへのシンボリックリンクも除外される。 |
QDirListing::IteratorFlag::ExcludeOther | 0x000010 | [6.10 以降] ディレクトリ、通常ファイル、またはシンボリックリンクではないファイルシステムエントリは一覧表示しません。
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | シンボリックリンク自体ではなく、リンクのターゲットのタイプに基づいてシンボリックリンクをフィルタリングします。壊れたシンボリックリンク(ターゲットが存在しないもの)は除外されます。これらを含めるには、IncludeBrokenSymlinks を設定してください。このフラグは、シンボリックリンクをサポートしていないオペレーティングシステムでは無視されます。 |
QDirListing::IteratorFlag::IncludeBrokenSymlinks | 0x001000 | [6.11 以降] ResolveSymlinks フラグの設定状態にかかわらず、ターゲットが存在しない壊れたシンボリックリンクを一覧表示します。このフラグは、シンボリックリンクをサポートしていないオペレーティングシステムでは無視されます。 |
QDirListing::IteratorFlag::FilesOnly | ExcludeDirs | ExcludeOther | 通常ファイルのみが一覧表示されます。ResolveSymlinks と組み合わせると、ファイルへのシンボリックリンクも一覧表示されます。 |
QDirListing::IteratorFlag::DirsOnly | ExcludeFiles | ExcludeOther | ディレクトリのみが一覧表示されます。「ResolveSymlinks」と組み合わせると、ディレクトリへのシンボリックリンクも一覧表示されます。 |
QDirListing::IteratorFlag::IncludeHidden | 0x000040 | 隠しエントリを一覧表示します。「Recursive」と組み合わせると、隠しサブディレクトリ内も再帰的に探索されます。 |
QDirListing::IteratorFlag::IncludeDotAndDotDot | 0x000080 | . および.. の特殊エントリを一覧表示します。 |
QDirListing::IteratorFlag::CaseSensitive | 0x000100 | QDirListing コンストラクタに渡される名前フィルタ内のファイルグロブパターンは、大文字と小文字を区別して照合されます(詳細については、QDir::setNameFilters( ) を参照してください)。 |
QDirListing::IteratorFlag::Recursive | 0x000400 | すべてのサブディレクトリ内のエントリも一覧表示します。FollowDirSymlinks と組み合わせると、ディレクトリへのシンボリックリンクも反復処理の対象となります。 |
QDirListing::IteratorFlag::FollowDirSymlinks | 0x000800 | Recursive と組み合わせると、ディレクトリへのシンボリックリンクも反復処理の対象となります。シンボリックリンクのループ(例:link => . や link => ..)は自動的に検出され、無視されます。 |
IteratorFlags 型は、QFlags<IteratorFlag> の typedef です。これは、IteratorFlag 値の OR 組み合わせを格納します。
メンバ関数のドキュメント
[explicit] QDirListing::QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default)
path を反復処理できる QDirListing を生成します。
flags を通じてオプションを渡すことで、ディレクトリの反復処理方法を制御できます。
デフォルトでは、flags はIteratorFlag::Default です。
IteratorFlagsも参照してください 。
[explicit] QDirListing::QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default)
path を反復処理できる QDirListing を作成します。
flags を介してオプションを渡すことで、ディレクトリの反復処理方法を制御できます。デフォルトでは、flags はIteratorFlag::Default に設定されています。
リストされるエントリは、nameFilters 内のファイルグロブパターンに従ってフィルタリングされます。これらのパターンは、QRegularExpression::fromWildcard を使用して正規表現に変換されます(詳細については、QDir::setNameFilters()を参照してください)。
たとえば、オーディオファイルを反復処理するには、次のようなイテレータを使用できます:
QDirListing audioFileIt(u"/home/johndoe/"_s, QStringList{u"*.mp3"_s, u"*.wav"_s},
QDirListing::IteratorFlag::FilesOnly);場合によっては、文字列比較を用いて range-for ループでエントリを反復処理することで、名前によるフィルタリングをより効率的に行うことができます。例えば:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive | F::ResolveSymlinks;
for (const auto &dirEntry : QDirListing(u"/usr"_s, flags)) {
// Faster than using name filters, filter ".txt" and ".html" files
// using QString API
const QString fileName = dirEntry.fileName();
if (fileName.endsWith(".txt"_L1) || fileName.endsWith(".html"_L1)) {
// ...
}
}
}IteratorFlags およびQDir::setNameFilters()も参照してください 。
[noexcept] QDirListing::QDirListing(QDirListing &&other)
移動コンストラクタ。other をこの QDirListing に移動します。
注:移動元のオブジェクト `other `は 、部分的に形成された状態になります。この状態では、有効な操作は破棄と新しい値の代入のみです。
[noexcept] QDirListing::~QDirListing()
QDirListing を削除します。
QDirListing::const_iterator QDirListing::begin() const
QDirListing::const_iterator QDirListing::cbegin() const
QDirListing::sentinel QDirListing::cend() const
QDirListing::sentinel QDirListing::end() const
(c) `begin()` は、ディレクトリエントリを反復処理するために使用できる `QDirListing::const_iterator ` を返します。
- これは順方向のみのシングルパス・イテレータです(ディレクトリエントリを逆順に反復処理することはできません)
- コピーすることはできず、
std::move()d のみが使用可能です。 std::input_iteratorをモデル化するオブジェクトに対するポストインクリメントの戻り値は、部分的に形成されたもの(それ以降に前進したイテレータのコピー)であり、そのようなオブジェクトに対して有効な操作は、破棄と新しいイテレータの代入のみです。したがって、ポストインクリメント演算子はイテレータを前進させ、voidを返します。- ランダムアクセスは許可されません
- 範囲指定の for ループで使用可能。または、ランダムアクセスイテレータを必要としない C++20 の std::ranges アルゴリズムと併用可能
- 有効なイテレータの参照解除は、
const DirEntry & - (c) `end()`は、反復の終了を示すQDirListing::sentinel を返します。`end()`と等価なイテレータを間接参照すると、未定義の挙動となります
注: 同じ `QDirListing ` オブジェクトに対して (c) `begin()` が呼び出されるたびに 、内部状態がリセットされ、反復処理が新たに開始される。
(上記の制限事項の一部は、基盤となるシステムライブラリ関数の実装によって定められています)。
例:
usingItFlag=QDirListing::IteratorFlag;
for(const auto &dirEntry: QDirListing(u"/etc"_s,ItFlag::Recursive)) {
qDebug() << dirEntry.filePath();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}名前でフィルタリングされたすべてのファイルを再帰的に検索して読み込む方法は次のとおりです:
F=QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s,QStringList{u"scaling_cur_freq"_s},F::FilesOnly|F::Recursive);
for(const auto &dirEntry: dirList) {
QFile f(dirEntry.filePath());
if(f.open(QIODevice::ReadOnly))
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}注: 「従来の」STLアルゴリズムは イテレータやセンチネルをサポートしていないため、QDirListing を行うにはC++20のstd::rangesアルゴリズムを使用するか、C++17で範囲ベースのアルゴリズムを提供するサードパーティ製ライブラリを使用する必要があります。
「QDirListing::DirEntry」も参照してください 。
QDirListing::IteratorFlags QDirListing::iteratorFlags() const
この `QDirListing` の構築に使用された `IteratorFlags ` の集合を返します。
QString QDirListing::iteratorPath() const
このQDirListing を構築するために使用されたディレクトリパスを返します。
QStringList QDirListing::nameFilters() const
この `QDirListing` の構築に使用されたファイル名グロブフィルタのリストを返します。
[noexcept] QDirListing &QDirListing::operator=(QDirListing &&other)
other をこのQDirListing に移動・代入します。
注: 移動元のオブジェクト other は 、部分的に形成された状態となり、この状態では破棄と新しい値の代入のみが有効な操作となります。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.