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 |
- Liste de tous les membres, y compris les membres hérités
- QDirListing fait partie de la catégorie « Entrée/Sortie et réseau ».
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.
| Constante | Valeur | Description |
|---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | Ré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::ExcludeFiles | 0x000004 | Ne pas lister les fichiers ordinaires. Lorsqu’elle est combinée avec ResolveSymlinks, les liens symboliques vers des fichiers ordinaires seront également exclus. |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | Ne 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::ExcludeOther | 0x000010 | [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.
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | Filtrer 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::IncludeBrokenSymlinks | 0x001000 | [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::FilesOnly | ExcludeDirs | ExcludeOther | Seuls 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::DirsOnly | ExcludeFiles | ExcludeOther | Seuls 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::IncludeHidden | 0x000040 | Ré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::IncludeDotAndDotDot | 0x000080 | Répertorier les entrées spéciales « . » et « .. ». |
QDirListing::IteratorFlag::CaseSensitive | 0x000100 | Les 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::Recursive | 0x000400 | Ré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::FollowDirSymlinks | 0x000800 | Lorsqu’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_iteratorest 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 renvoievoid. - 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.