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

パブリックタイプ

class DirEntry
(since 6.8) class const_iterator
(since 6.8) class sentinel
enum class IteratorFlag { Default, ExcludeFiles, ExcludeDirs, ExcludeSpecial, 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 &dirEntryQDirListing(u"/etc"_s,ItFlag::Recursive)) { (const auto &dirEntry ::再帰的)    qDebug() << dirEntry.filePath();
   // /etc/. // /etc/.. // /etc/X11 // /etc/X11/fs // ...}

以下は、名前でフィルタリングされたすべての通常ファイルを再帰的に検索して読み込む方法である:

UsingF=QDirListing::IteratorFlag;QDirListingdirList(u"/sys"_sQStringList{u"scaling_cur_freq"_s},F::FilesOnly|F::Recursive);for(const auto &dirEntry: dirList) { f(dirEntry.file_freq_s},F::FilesOnly|F::Recursive)    QFilef(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++20std::input_iterator つまり、移動のみ、前進のみ、シングルパスのイテレータで、ランダムアクセスを許可しません。これは、範囲指定ループで使用できます(または、ランダムアクセス イテレータを必要としない C++20 範囲指定アルゴリズムで使用できます)。有効なイテレータを再参照すると、 オブジェクトが返されます。(c) () センチネルは、反復処理の終了を示します。 と等しいイテレータを再参照することは、未定義の動作です。QDirListing::DirEntryend sentinel

QDirListing::DirEntry は、 の API のサブセット (例えば、fileName()、filePath()、exists()) を提供します。内部的には、 は、必要な場合、つまり他のシステム関数によって情報がまだ取得されていない場合にのみ、 オブジェクトを構築します。 を取得するには () を使用します:QFileInfo DirEntry QFileInfo QFileInfo DirEntry::fileInfo

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'ed することができます。

定数説明
QDirListing::IteratorFlag::Default0x000000壊れたシンボリックリンク (ターゲットが存在しない) を含む、すべてのファイル、ディレクトリ、シンボリックリンクをリストします。隠しファイルや隠しディレクトリ、特別なエントリ... はデフォルトではリストされない。
QDirListing::IteratorFlag::ExcludeFiles0x000004通常のファイルは表示しません。ResolveSymlinks と組み合わせると、通常のファイルへのシンボリックリンクも除外されます。
QDirListing::IteratorFlag::ExcludeDirs0x000008ディレクトリを表示しない。ResolveSymlinks と組み合わせると、ディレクトリへのシンボリックリンクも除外されます。
QDirListing::IteratorFlag::ExcludeSpecial0x000010特殊なシステムファイルをリストしない:
  • Unixの場合: ディレクトリ、通常のファイル、シンボリックリンク (壊れたシンボリックリンクも含む) ではないエントリ。つまり、FIFO、ソケット、キャラクタデバイス、ブロックデバイスである。
  • Windowsの場合:.lnk.
QDirListing::IteratorFlag::ResolveSymlinks0x000020シンボリックリンク自体ではなく、リンク先のタイプに基づいてシンボリックリンクをフィルタリングする。このフラグを使うと、壊れたシンボリック・リンク(ターゲットが存在しない)は除外される。このフラグは、シンボリックリンクをサポートしていないオペレーティング・システムでは無視される。
QDirListing::IteratorFlag::FilesOnlyExcludeDirs | ExcludeSpecial通常のファイルだけがリストされる。ResolveSymlinks と組み合わせると、ファイルへのシンボリックリンクもリストされます。
QDirListing::IteratorFlag::DirsOnlyExcludeFiles | ExcludeSpecialディレクトリのみがリストされる。ResolveSymlinks と組み合わせると、ディレクトリへのシンボリックリンクも表示されます。
QDirListing::IteratorFlag::IncludeHidden0x000040隠しエントリをリストする。Recursiveと組み合わせると、非表示のサブディレクトリも再検索されます。
QDirListing::IteratorFlag::IncludeDotAndDotDot0x000080. および.. の特殊エントリをリストします。
QDirListing::IteratorFlag::CaseSensitive0x000100QDirListing コンストラクタに渡された名前フィルタのファイル glob パターンは、大文字小文字を区別してマッチします (詳細はQDir::setNameFilters() を参照)。
QDirListing::IteratorFlag::Recursive0x000400すべてのサブディレクトリ内のエントリもリストします。FollowDirSymlinks と組み合わせると、ディレクトリへのシンボリックリンクも繰り返し処理されます。
QDirListing::IteratorFlag::FollowDirSymlinks0x000800Recursive と組み合わせると、ディレクトリへのシンボリックリンクも反復される。シンボリックリンクのループ(link => . や link => ...など)は自動的に検出され、無視される。

IteratorFlags型はQFlags<IteratorFlag>のtypedefである。IteratorFlag値のORの組み合わせを格納する。

メンバ関数のドキュメント

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 を返します。
  • ランダムアクセスを許さない
  • 範囲指定ループや、ランダムアクセスのイテレータを必要としない C++20 std::ranges アルゴリズムで使用できます。
  • 有効なイテレータを再参照するとconst DirEntry &
  • (c)end() は、反復処理の終了を示すQDirListing::sentinel を返します。end() と等しい値を比較するイテレータの参照解除は、未定義の動作です。

注意: 同じQDirListing オブジェクトに対して(c)begin()が呼び出されるたびに、内部状態がリセットされ、反復が新たに開始される。

(上記の制限の一部は、基礎となるシステム・ライブラリ関数の実装によって決まります)。

例えば

usingItFlag=QDirListing::IteratorFlag;for(const auto &dirEntryQDirListing(u"/etc"_s,ItFlag::Recursive)) { { (u"/etc"_sItFlag::Recursive))    qDebug() << dirEntry.filePath();
   // /etc/. // /etc/.. // /etc/X11 // /etc/X11/fs // ...}

以下は、名前でフィルタリングされたすべてのファイルを再帰的に検索して読み込む方法である:

UsingF=QDirListing::IteratorFlag;QDirListingdirList(u"/sys"_sQStringListu"scaling_cur_freq"_s},F::FilesOnly|F::Recursive);for(const auto &dirEntry: dirList) { f(dirEntry.file_freq){。    QFilef(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も参照してください

[explicit] QDirListing::QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default)

path を反復処理できる QDirListing を構築します。

flags を介してオプションを渡すことで、ディレクトリの反復処理を制御できます。

デフォルトでは、flagsIteratorFlag::Default です。

IteratorFlagsも参照してください

[explicit] QDirListing::QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default)

path を反復処理できる QDirListing を構築します。

flags を介してオプションを渡すことで、ディレクトリの反復処理を制御できます。既定では、flagsIteratorFlag::Default です。

リストされたエントリは、nameFilters のファイル・グロブ・パターンに従ってフィルタリングされます (詳細はQDir::setNameFilters() を参照)。

たとえば、以下のイテレータを使用して、オーディオ・ファイルを反復処理することができる:

QDirListing audioFileIt(u"/home/johndoe/"_s, QStringList{u"*.mp3"_s, u"*.wav"_s},
                        QDirListing::IteratorFlag::FilesOnly);

IteratorFlags およびQDir::setNameFilters()も参照

[noexcept] QDirListing::QDirListing(QDirListing &&other)

移動コンストラクタ。other をこの QDirListing に移動します。

注意: 移動元のオブジェクトother は部分的に形成された状態に置かれます。この状態では、有効な操作は破壊と新しい値の割り当てのみです。

[noexcept] QDirListing::~QDirListing()

QDirListing を破壊する。

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 は、部分的に形成された状態に置かれる。この状態では、有効な操作は破壊と新しい値の割り当てのみである。

© 2025 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.