Sur cette page

QDirListing Class

La classe QDirListing fournit un itérateur de type STL pour les entrées de répertoire. En savoir plus...

En-tête : #include <QDirListing>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.8

Types publics

class DirEntry
(since 6.8) class const_iterator
(since 6.8) class sentinel
enum class IteratorFlag { Default, ExcludeFiles, ExcludeDirs, ExcludeOther, ResolveSymlinks, …, FollowDirSymlinks }
flags IteratorFlags

Fonctions publiques

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)

Description détaillée

Vous pouvez utiliser QDirListing pour parcourir les éléments d'un répertoire un par un. Cette fonction est similaire à QDir::entryList() et QDir::entryInfoList(), mais comme elle affiche les éléments un par un plutôt que tous en même temps, elle offre de meilleures performances et est plus adaptée aux répertoires volumineux. Elle prend également en charge l'affichage récursif du contenu des répertoires et le suivi des liens symboliques. Contrairement à QDir::entryList(), QDirListing ne prend pas en charge le tri.

Le constructeur de QDirListing prend comme argument une chaîne de caractères représentant le chemin d’accès au répertoire. Voici comment parcourir toutes les entrées de manière récursive :

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

Voici comment rechercher et lire tous les fichiers ordinaires filtrés par nom, de manière récursive :

en utilisant 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";
}

Voici comment lister uniquement les fichiers normaux, de manière récursive :

using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive;
for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) {
    // ...
}

Voici comment lister uniquement les fichiers ordinaires et les liens symboliques vers des fichiers ordinaires, de manière récursive :

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 modèle std::input_iterator de C++20, c'est-à-dire qu’il s’agit d’un itérateur à passage unique, en lecture seule et à déplacement uniquement, qui ne permet pas l’accès aléatoire. Il peut être utilisé dans des boucles « for » sur des plages (ou avec les algorithmes de plage C++20 qui ne nécessitent pas d’itérateurs à accès aléatoire). La déréférence d’un itérateur valide renvoie un objet ` QDirListing::DirEntry `. La sentinelle (c) `end()` marque la fin de l’itération. La déréférence d’un itérateur égal à ` sentinel ` entraîne un comportement indéfini.

QDirListing::DirEntry propose un sous-ensemble de l’API de ` QFileInfo` (par exemple, `fileName()`, `filePath()`, `exists()`). En interne, ` DirEntry ` ne construit un objet ` QFileInfo ` qu’en cas de besoin, c’est-à-dire si les informations n’ont pas déjà été récupérées par d’autres fonctions système. Vous pouvez utiliser ` DirEntry::fileInfo()` pour obtenir un ` QFileInfo`. Par exemple :

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 */) { /* ... */ }
}

Voir également QDir et QDir::entryList().

Documentation sur les types de membres

enum class QDirListing::IteratorFlag
flags QDirListing::IteratorFlags

Cette classe d'énumération décrit les indicateurs pouvant être utilisés pour configurer le comportement de QDirListing. Les valeurs de cette énumération peuvent être combinées à l'aide d'une opération de OU binaire.

ConstanteValeurDescription
QDirListing::IteratorFlag::Default0x000000Répertorie toutes les entrées, c'est-à-dire les fichiers, les répertoires, les liens symboliques (y compris ceux qui ne fonctionnent pas, c'est-à-dire dont la cible n'existe pas) et les fichiers système spéciaux (autres) ; voir ExcludeOther pour plus de détails. Les fichiers et répertoires cachés, ainsi que les entrées spéciales . et .., ne sont pas répertoriés par défaut.
QDirListing::IteratorFlag::ExcludeFiles0x000004Ne pas lister les fichiers ordinaires. Lorsqu’elle est combinée avec ResolveSymlinks, les liens symboliques vers des fichiers ordinaires seront également exclus.
QDirListing::IteratorFlag::ExcludeDirs0x000008Ne pas répertorier les répertoires. Lorsqu’elle est combinée avec ResolveSymlinks, les liens symboliques vers des répertoires seront également exclus.
QDirListing::IteratorFlag::ExcludeOther0x000010[depuis la version 6.10] Ne pas afficher les entrées du système de fichiers qui ne sont ni des répertoires, ni des fichiers ordinaires, ni des liens symboliques.
  • Sous Unix, une entrée spéciale (autre) du système de fichiers est un FIFO, un socket, un périphérique de caractères ou un périphérique bloc. Pour plus de détails, consultez la mknod page de manuel.
  • Sous Windows (pour des raisons historiques), les fichiers « .lnk » sont considérés comme des entrées spéciales (autres) du système de fichiers.
QDirListing::IteratorFlag::ResolveSymlinks0x000020Filtrer les liens symboliques en fonction du type de la cible du lien, plutôt qu’en fonction du lien symbolique lui-même. Les liens symboliques rompus (dont la cible n’existe pas) sont exclus ; définissez IncludeBrokenSymlinks pour les inclure. Ce drapeau est ignoré sur les systèmes d’exploitation qui ne prennent pas en charge les liens symboliques.
QDirListing::IteratorFlag::IncludeBrokenSymlinks0x001000[depuis la version 6.11] Répertorie les liens symboliques rompus, c’est-à-dire ceux dont la cible n’existe pas, quel que soit l’état de l’indicateur ResolveSymlinks. Cet indicateur est ignoré sur les systèmes d’exploitation qui ne prennent pas en charge les liens symboliques.
QDirListing::IteratorFlag::FilesOnlyExcludeDirs | ExcludeOtherSeuls les fichiers ordinaires seront répertoriés. Lorsqu’il est combiné avec ResolveSymlinks, les liens symboliques vers des fichiers seront également répertoriés.
QDirListing::IteratorFlag::DirsOnlyExcludeFiles | ExcludeOtherSeuls les répertoires seront répertoriés. Lorsqu'il est combiné avec ResolveSymlinks, les liens symboliques vers des répertoires seront également répertoriés.
QDirListing::IteratorFlag::IncludeHidden0x000040Répertorie les entrées masquées. Lorsqu’il est combiné avec Recursive, la recherche s’étend également aux sous-répertoires masqués.
QDirListing::IteratorFlag::IncludeDotAndDotDot0x000080Répertorier les entrées spéciales « . » et « .. ».
QDirListing::IteratorFlag::CaseSensitive0x000100Les motifs de recherche de fichiers dans les filtres de nom transmis au constructeur ` QDirListing ` seront mis en correspondance en tenant compte de la casse (pour plus de détails, voir ` QDir::setNameFilters()`).
QDirListing::IteratorFlag::Recursive0x000400Répertorie également les entrées de tous les sous-répertoires. Lorsqu’elle est combinée avec FollowDirSymlinks, les liens symboliques vers des répertoires seront également parcourus.
QDirListing::IteratorFlag::FollowDirSymlinks0x000800Lorsqu’il est combiné avec Recursive, les liens symboliques vers des répertoires seront également parcourus. Les boucles de liens symboliques (par exemple, lien => . ou lien => ..) sont automatiquement détectées et ignorées.

Le type IteratorFlags est un typedef pour QFlags<IteratorFlag>. Il stocke une combinaison OR de valeurs IteratorFlag.

Documentation des fonctions membres

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

Crée un objet `QDirListing` permettant de parcourir ` path`.

Vous pouvez passer des options via ` flags ` pour contrôler la manière dont le répertoire doit être parcouru.

Par défaut, ` flags ` est ` IteratorFlag::Default`.

Voir également IteratorFlags.

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

Crée un objet `QDirListing` permettant de parcourir ` path`.

Vous pouvez passer des options via flags pour contrôler la manière dont le répertoire doit être parcouru. Par défaut, flags est défini sur IteratorFlag::Default.

Les entrées répertoriées seront filtrées selon les modèles de recherche de fichiers définis dans ` nameFilters`, qui sont convertis en expression régulière à l’aide de ` QRegularExpression::fromWildcard ` (voir ` QDir::setNameFilters()` pour plus de détails).

Par exemple, l’itérateur suivant pourrait être utilisé pour parcourir les fichiers audio :

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

Il est parfois possible de filtrer par nom plus efficacement en parcourant les entrées à l’aide d’une boucle « range-for », en utilisant la comparaison de chaînes de caractères. Par exemple :

    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)) {
            // ...
        }
    }
}

Voir également IteratorFlags et QDir::setNameFilters().

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

Constructeur de déplacement. Déplace l'other vers ce QDirListing.

Remarque : l'objet d'origine other est placé dans un état partiellement formé, dans lequel les seules opérations valides sont la destruction et l'affectation d'une nouvelle valeur.

[noexcept] QDirListing::~QDirListing()

Supprime l'QDirListing.

QDirListing::const_iterator QDirListing::begin() const

QDirListing::const_iterator QDirListing::cbegin() const

QDirListing::sentinel QDirListing::cend() const

QDirListing::sentinel QDirListing::end() const

(c) La fonction `begin()` renvoie un objet ` QDirListing::const_iterator ` qui permet de parcourir les entrées du répertoire.

  • Il s'agit d'un itérateur à passage unique et à sens unique (vous ne pouvez pas parcourir les entrées du répertoire dans l'ordre inverse)
  • Il ne peut pas être copié ; seul std::move()d peut l'être.
  • La valeur de retour de l’opérateur de post-incrément sur les objets implémentant std::input_iterator est partiellement formée (une copie d’un itérateur qui a depuis été avancé) ; les seules opérations valides sur un tel objet sont la destruction et l’affectation d’un nouvel itérateur. Par conséquent, l’opérateur de post-incrément fait avancer l’itérateur et renvoie void.
  • Ne permet pas l’accès aléatoire
  • Peut être utilisé dans des boucles `for` avec plage ; ou avec les algorithmes `std::ranges` de C++20 qui ne nécessitent pas d'itérateurs à accès aléatoire
  • La déréférence d’un itérateur valide renvoie un const DirEntry &
  • (c) La fonction `end()` renvoie une valeur ` QDirListing::sentinel ` qui signale la fin de l’itération. La déréférence d’un itérateur dont la valeur est égale à celle renvoyée par ` end()` entraîne un comportement indéfini

Remarque : Chaque fois que la fonction (c) `begin()` est appelée sur le même objet ` QDirListing `, l’état interne est réinitialisé et l’itération recommence.

(Certaines des restrictions ci-dessus sont dictées par l’implémentation des fonctions de la bibliothèque système sous-jacente).

Par exemple :

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

Voici comment rechercher et lire tous les fichiers filtrés par nom, de manière récursive :

en utilisant 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";
}

Remarque : les algorithmes « classiques » de la STL ne prennent pas en charge les itérateurs/sentinelles ; vous devez donc utiliser les algorithmes std::ranges de C++20 pour l'QDirListing, ou bien une bibliothèque tierce proposant des algorithmes basés sur les plages en C++17.

Voir également QDirListing::DirEntry.

QDirListing::IteratorFlags QDirListing::iteratorFlags() const

Renvoie l'ensemble des « IteratorFlags » utilisés pour construire cet « QDirListing ».

QString QDirListing::iteratorPath() const

Renvoie le chemin d'accès au répertoire utilisé pour créer cette QDirListing.

QStringList QDirListing::nameFilters() const

Renvoie la liste des filtres de noms de fichiers globaux utilisés pour construire cette expression « QDirListing ».

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

L'opération « move-assign » attribue other à QDirListing.

Remarque : l’objet d’origine other est placé dans un état partiellement formé, dans lequel les seules opérations valides sont la destruction et l’affectation d’une nouvelle valeur.

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