QDirListing Class
La classe QDirListing fournit un itérateur de style STL pour les entrées de répertoire. Plus d'informations...
| 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 |
- Liste de tous les membres, y compris les membres hérités
- QDirListing fait partie de Input/Output et Networking.
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 entrées d'un répertoire une par une. Il est similaire à QDir::entryList() et QDir::entryInfoList(), mais comme il énumère les entrées une par une au lieu de toutes en même temps, il s'adapte mieux et convient mieux aux grands répertoires. Il permet également de lister le contenu des répertoires de manière récursive et de suivre les liens symboliques. Contrairement à QDir::entryList(), QDirListing ne prend pas en charge le tri.
Le constructeur de QDirListing prend en argument une chaîne de chemin d'accès au répertoire. Voici comment itérer sur 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 trouver et lire tous les fichiers réguliers filtrés par nom, de manière récursive :
using 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 réguliers, 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 normaux et les liens symboliques vers des fichiers normaux, 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 C++20 std::input_iterator, c'est-à-dire que c'est un itérateur à déplacement uniquement, à progression uniquement, à passage unique, qui ne permet pas l'accès aléatoire. Il peut être utilisé dans les boucles "ranged-for" (ou avec les algorithmes "range" du C++20 qui ne nécessitent pas d'itérateurs à accès aléatoire). Le déréférencement d'un itérateur valide renvoie un objet QDirListing::DirEntry. La sentinelle (c)end() marque la fin de l'itération. Le déréférencement d'un itérateur égal à sentinel est un comportement indéfini.
QDirListing::DirEntry offre 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 l'information n'a pas déjà été récupérée par d'autres fonctions du système. Vous pouvez utiliser DirEntry::fileInfo() pour obtenir un objet 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 aussi QDir et QDir::entryList().
Type de membre Documentation
enum class QDirListing::IteratorFlag
flags QDirListing::IteratorFlags
Cette classe d'énumération décrit les drapeaux qui peuvent être utilisés pour configurer le comportement de QDirListing. Les valeurs de cet énumérateur peuvent être combinées par un OU binaire.
| Constante | Valeur | Description |
|---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | Liste toutes les entrées, c'est-à-dire les fichiers, les répertoires, les liens symboliques, y compris les liens symboliques rompus (lorsque 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 et les entrées spéciales . et .. ne sont pas listés par défaut. |
QDirListing::IteratorFlag::ExcludeFiles | 0x000004 | Ne pas lister les fichiers normaux. En combinaison avec ResolveSymlinks, les liens symboliques vers des fichiers normaux seront également exclus. |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | Ne pas lister les répertoires. Lorsqu'il est combiné avec ResolveSymlinks, les liens symboliques vers les répertoires seront également exclus. |
QDirListing::IteratorFlag::ExcludeOther | 0x000010 | [depuis 6.10] Ne pas lister les entrées du système de fichiers qui ne sont ni des répertoires, ni des fichiers normaux, ni des liens symboliques.
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | Filtrer les liens symboliques en fonction du type de la cible du lien, plutôt que du lien symbolique lui-même. Les liens symboliques brisés (lorsque la cible n'existe pas) sont exclus ; définissez IncludeBrokenSymlinks pour les inclure. Cette option est ignorée sur les systèmes d'exploitation qui ne prennent pas en charge les liens symboliques. |
QDirListing::IteratorFlag::IncludeBrokenSymlinks | 0x001000 | [depuis la version 6.11] Liste les liens symboliques brisés, lorsque la cible n'existe pas, quel que soit l'état de l'indicateur ResolveSymlinks. Cette option est ignorée sur les systèmes d'exploitation qui ne prennent pas en charge les liens symboliques. |
QDirListing::IteratorFlag::FilesOnly | ExcludeDirs | ExcludeOther | Seuls les fichiers normaux sont répertoriés. Lorsqu'il est combiné avec ResolveSymlinks, les liens symboliques vers les fichiers sont également répertoriés. |
QDirListing::IteratorFlag::DirsOnly | ExcludeFiles | ExcludeOther | Seuls les répertoires seront listés. Combiné avec ResolveSymlinks, les liens symboliques vers les répertoires seront également listés. |
QDirListing::IteratorFlag::IncludeHidden | 0x000040 | Lister les entrées cachées. Lorsqu'elle est combinée avec Recursive, l'itération recourra également à la récursivité dans les sous-répertoires cachés. |
QDirListing::IteratorFlag::IncludeDotAndDotDot | 0x000080 | Lister les entrées spéciales . et ... |
QDirListing::IteratorFlag::CaseSensitive | 0x000100 | Les motifs globaux de fichiers dans les filtres de noms passés au constructeur de QDirListing seront pris en compte en tenant compte de la casse (pour plus de détails, voir QDir::setNameFilters()). |
QDirListing::IteratorFlag::Recursive | 0x000400 | Lister également les entrées à l'intérieur de tous les sous-répertoires. Combiné avec FollowDirSymlinks, les liens symboliques vers les répertoires seront également itérés. |
QDirListing::IteratorFlag::FollowDirSymlinks | 0x000800 | Combiné avec Recursive, les liens symboliques vers les répertoires seront également itérés. Les boucles de liens symboliques (par exemple, link => . ou link => ..) sont automatiquement détectées et ignorées. |
Le type IteratorFlags est un typedef pour QFlags<IteratorFlag>. Il stocke une combinaison OU de valeurs IteratorFlag.
Documentation des fonctions membres
[explicit] QDirListing::QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default)
Construit une QDirListing qui peut itérer sur path.
Vous pouvez passer des options via flags pour contrôler la façon dont le répertoire doit être itéré.
Par défaut, flags est IteratorFlag::Default.
Voir aussi IteratorFlags.
[explicit] QDirListing::QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default)
Construit une QDirListing qui peut itérer sur path.
Vous pouvez passer des options via flags pour contrôler la façon dont le répertoire doit être itéré. Par défaut, flags est IteratorFlag::Default.
Les entrées de la liste seront filtrées en fonction des motifs globaux de fichier dans nameFilters, qui sont convertis en une expression régulière à l'aide de QRegularExpression::fromWildcard (voir QDir::setNameFilters() pour plus de détails).
Par exemple, l'itérateur suivant peut ê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 de manière plus efficace en itérant sur les entrées à l'aide d'une boucle range-for, en utilisant la comparaison de chaînes. Par exemple, l'itérateur suivant pourrait être utilisé pour parcourir les fichiers audio
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 other dans cette QDirListing.
Remarque : l'objet déplacé other est placé dans un état partiellement formé, dans lequel les seules opérations valables sont la destruction et l'attribution d'une nouvelle valeur.
[noexcept] QDirListing::~QDirListing()
Détruit le site QDirListing.
QDirListing::const_iterator QDirListing::begin() const
QDirListing::const_iterator QDirListing::cbegin() const
QDirListing::sentinel QDirListing::end() const
QDirListing::sentinel QDirListing::cend() const
(c)begin() renvoie un QDirListing::const_iterator qui peut être utilisé pour parcourir les entrées du répertoire.
- Il s'agit d'un itérateur à passage unique (il n'est pas possible d'itérer les entrées du répertoire dans l'ordre inverse).
- Ne peut pas être copié, seulement
std::move()d. - La valeur de retour de post-incrément sur les objets qui modélisent
std::input_iteratorest partiellement formée (une copie d'un itérateur qui a été avancé depuis), les seules opérations valides sur un tel objet sont la destruction et l'assignation d'un nouvel itérateur. Par conséquent, l'opérateur post-incrément fait avancer l'itérateur et renvoievoid. - Ne permet pas l'accès aléatoire
- Peut être utilisé dans les boucles "ranged-for" ou avec les algorithmes C++20 std::ranges qui ne nécessitent pas d'itérateurs à accès aléatoire.
- Le déréférencement d'un itérateur valide renvoie une valeur de
const DirEntry & - (c)end() renvoie un QDirListing::sentinel qui signale la fin de l'itération. Le déréférencement d'un itérateur dont la comparaison est égale à end() est un comportement indéfini.
Remarque : chaque fois que (c)begin() est appelé 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 trouver et lire tous les fichiers filtrés par nom, de manière récursive :
using 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"; }
Note : Les algorithmes STL "classiques" ne supportent pas les itérateurs/sentinelles, vous devez donc utiliser les algorithmes std::ranges de C++20 pour QDirListing, ou bien une bibliothèque tierce qui fournit des algorithmes basés sur les intervalles en C++17.
Voir aussi QDirListing::DirEntry.
QDirListing::IteratorFlags QDirListing::iteratorFlags() const
Renvoie l'ensemble de IteratorFlags utilisé pour construire ce QDirListing.
QString QDirListing::iteratorPath() const
Renvoie le chemin d'accès au répertoire utilisé pour construire cette QDirListing.
QStringList QDirListing::nameFilters() const
Retourne la liste des filtres globaux de noms de fichiers utilisés pour construire ce QDirListing.
[noexcept] QDirListing &QDirListing::operator=(QDirListing &&other)
Move-assigns other to this QDirListing.
Note : L'objet déplacé other est placé dans un état partiellement formé, dans lequel les seules opérations valables sont la destruction et l'attribution 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.