QDirListing Class
La clase QDirListing proporciona un iterador estilo STL para entradas de directorio. Más...
| Cabecera: | #include <QDirListing> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Desde: | Qt 6.8 |
- Lista de todos los miembros, incluyendo los heredados
- QDirListing es parte de Entrada/Salida y Redes.
Tipos Públicos
| class | DirEntry |
(since 6.8) class | const_iterator |
(since 6.8) class | sentinel |
| enum class | IteratorFlag { Default, ExcludeFiles, ExcludeDirs, ExcludeOther, ResolveSymlinks, …, FollowDirSymlinks } |
| flags | IteratorFlags |
Funciones Públicas
| 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) |
Descripción detallada
Puedes usar QDirListing para navegar por las entradas de un directorio de una en una. Es similar a QDir::entryList() y QDir::entryInfoList(), pero como lista las entradas de una en una en lugar de todas a la vez, se escala mejor y es más adecuado para directorios grandes. También permite listar el contenido de los directorios de forma recursiva y seguir enlaces simbólicos. A diferencia de QDir::entryList(), QDirListing no permite la ordenación.
El constructor de QDirListing toma una cadena de ruta de directorio como argumento. He aquí cómo iterar sobre todas las entradas recursivamente:
using ItFlag = QDirListing::IteratorFlag;for(const auto &dirEntry: QDirListing(u"/etc"_s, ItFlag::Recursive)) { qDebug() << dirEntry.filePath(); // /etc/. // /etc/.. // /etc/X11 // /etc/X11/fs // ...}
He aquí cómo encontrar y leer todos los ficheros regulares filtrados por nombre, recursivamente:
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::SóloLectura)) qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz"; }
A continuación se muestra cómo listar sólo archivos normales, de forma recursiva:
using F = QDirListing::IteratorFlag; const auto flags = F::FilesOnly | F::Recursive; for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) { // ... }
He aquí cómo listar sólo ficheros normales y enlaces simbólicos a ficheros normales, recursivamente:
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 modela C++20 std::input_iterator, es decir, es un iterador de sólo movimiento, de sólo avance, de una sola pasada, que no permite acceso aleatorio. Puede utilizarse en bucles de rango-for (o con algoritmos de rango C++20 que no requieran iteradores de acceso aleatorio). La desreferenciación de un iterador válido devuelve un objeto QDirListing::DirEntry. El centinela (c)end() marca el final de la iteración. La desreferenciación de un iterador que es igual a sentinel es un comportamiento indefinido.
QDirListing::DirEntry ofrece un subconjunto de la API de QFileInfo(por ejemplo, fileName(), filePath(), exists()). Internamente, DirEntry sólo construye un objeto QFileInfo si es necesario, es decir, si la información no ha sido ya obtenida por otras funciones del sistema. Puede utilizar DirEntry::fileInfo() para obtener un QFileInfo. Por ejemplo:
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 */) { /* ... */ } }
Véase también QDir y QDir::entryList().
Documentación de Tipos de Miembros
clase enum QDirListing::IteratorFlag
flags QDirListing::IteratorFlags
Esta clase enum describe las banderas que pueden ser usadas para configurar el comportamiento de QDirListing. Los valores de este enumerador pueden ser bitwise OR'ed juntos.
| Constante | Valor | Descripción |
|---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | Lista todas las entradas, es decir, archivos, directorios, enlaces simbólicos incluyendo enlaces simbólicos rotos (donde el objetivo no existe) y archivos especiales(otros) del sistema, ver ExcludeOther para más detalles. Los archivos y directorios ocultos y las entradas especiales . y .. no se listan por defecto. |
QDirListing::IteratorFlag::ExcludeFiles | 0x000004 | No lista los archivos normales. Si se combina con ResolveSymlinks, también se excluirán los enlaces simbólicos a archivos normales. |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | No listar directorios. Cuando se combina con ResolveSymlinks, también se excluyen los enlaces simbólicos a directorios. |
QDirListing::IteratorFlag::ExcludeOther | 0x000010 | [Desde 6.10] No listar entradas del sistema de ficheros que no sean directorios, ficheros normales o enlaces simbólicos.
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | Filtrar enlaces simbólicos basándose en el tipo de destino del enlace, en lugar del propio enlace simbólico. Los enlaces simbólicos rotos (cuando el destino no existe) se excluyen, establezca IncludeBrokenSymlinks para incluirlos. Esta opción se ignora en sistemas operativos que no soportan enlaces simbólicos. |
QDirListing::IteratorFlag::IncludeBrokenSymlinks | 0x001000 | [desde 6.11] Lista los enlaces simbólicos rotos, cuando el destino no existe, independientemente del estado de la opción ResolveSymlinks. Esta opción se ignora en sistemas operativos que no soportan enlaces simbólicos. |
QDirListing::IteratorFlag::FilesOnly | ExcludeDirs | ExcludeOther | Sólo se mostrarán los archivos normales. Si se combina con ResolveSymlinks, también se mostrarán los enlaces simbólicos a ficheros. |
QDirListing::IteratorFlag::DirsOnly | ExcludeFiles | ExcludeOther | Sólo se mostrarán los directorios. Si se combina con ResolveSymlinks, también se mostrarán los enlaces simbólicos a directorios. |
QDirListing::IteratorFlag::IncludeHidden | 0x000040 | Listar entradas ocultas. Si se combina con Recursive, la iteración también buscará en los subdirectorios ocultos. |
QDirListing::IteratorFlag::IncludeDotAndDotDot | 0x000080 | Listar las entradas especiales . y ... |
QDirListing::IteratorFlag::CaseSensitive | 0x000100 | Los patrones glob de archivo en los filtros de nombre pasados al constructor QDirListing, se compararán teniendo en cuenta mayúsculas y minúsculas (para más detalles, véase QDir::setNameFilters()). |
QDirListing::IteratorFlag::Recursive | 0x000400 | Lista también las entradas dentro de todos los subdirectorios. Si se combina con FollowDirSymlinks, también se iterarán los enlaces simbólicos a directorios. |
QDirListing::IteratorFlag::FollowDirSymlinks | 0x000800 | Si se combina con Recursive, también se iterarán los enlaces simbólicos a directorios. Los bucles de enlaces simbólicos (por ejemplo, link => . o link => ..) se detectan automáticamente y se ignoran. |
El tipo IteratorFlags es un typedef para QFlags<IteratorFlag>. Almacena una combinación OR de valores IteratorFlag.
Documentación de las funciones miembro
[explicit] QDirListing::QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default)
Construye un QDirListing que puede iterar sobre path.
Puedes pasar opciones a través de flags para controlar cómo debe ser iterado el directorio.
Por defecto, flags es IteratorFlag::Default.
Ver también IteratorFlags.
[explicit] QDirListing::QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default)
Construye un QDirListing que puede iterar sobre path.
Puedes pasar opciones a través de flags para controlar cómo debe ser iterado el directorio. Por defecto, flags es IteratorFlag::Default.
Las entradas listadas serán filtradas de acuerdo a los patrones glob de archivo en nameFilters, los cuales son convertidos a una expresión regular usando QRegularExpression::fromWildcard (ver QDir::setNameFilters() para más detalles).
Por ejemplo, el siguiente iterador podría utilizarse para iterar sobre archivos de audio:
QDirListing audioFileIt(u"/home/johndoe/"_s, QStringList{u"*.mp3"_s, u"*.wav"_s}, QDirListing::IteratorFlag::FilesOnly);
A veces se puede filtrar por nombre de forma más eficiente iterando sobre las entradas con un bucle range-for, utilizando la comparación de cadenas. Por ejemplo:
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)) { // ... } } }
Véase también IteratorFlags y QDir::setNameFilters().
[noexcept] QDirListing::QDirListing(QDirListing &&other)
Constructor Move. Mueve other dentro de este QDirListing.
Nota: El objeto movido-desde other se coloca en un estado parcialmente formado, en el que las únicas operaciones válidas son la destrucción y la asignación de un nuevo valor.
[noexcept] QDirListing::~QDirListing()
Destruye el 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() devuelve un QDirListing::const_iterator que puede utilizarse para iterar sobre las entradas del directorio.
- Se trata de un iterador de una sola pasada (no se pueden iterar las entradas de directorio en orden inverso).
- No se puede copiar, sólo
std::move()d. - El valor de retorno de post-incremento en objetos que modelan
std::input_iteratorestá parcialmente formado (una copia de un iterador que ya ha sido avanzado), las únicas operaciones válidas sobre un objeto de este tipo son la destrucción y la asignación de un nuevo iterador. Por lo tanto, el operador post-incremento avanza el iterador y devuelvevoid. - No permite el acceso aleatorio
- Puede utilizarse en bucles ranged-for; o con algoritmos std::ranges de C++20 que no requieran iteradores de acceso aleatorio
- La desreferenciación de un iterador válido devuelve a
const DirEntry & - (c)end() devuelve un QDirListing::sentinel que señala el final de la iteración. Desreferenciar un iterador que compara igual a end() es un comportamiento indefinido
Nota: Cada vez que se llama a (c)begin() sobre el mismo objeto QDirListing, el estado interno se reinicia y la iteración comienza de nuevo.
(Algunas de las restricciones anteriores vienen dictadas por la implementación de las funciones de la biblioteca del sistema subyacente).
Por ejemplo:
using ItFlag = QDirListing::IteratorFlag;for(const auto &dirEntry: QDirListing(u"/etc"_s, ItFlag::Recursive)) { qDebug() << dirEntry.filePath(); // /etc/. // /etc/.. // /etc/X11 // /etc/X11/fs // ...}
He aquí cómo encontrar y leer todos los ficheros filtrados por nombre, recursivamente:
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::SóloLectura)) qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz"; }
Nota: Los algoritmos "clásicos" de la STL no soportan iteradores/sentinelas, por lo que es necesario utilizar algoritmos std::ranges de C++20 para QDirListing, o bien una librería de terceros que proporcione algoritmos basados en rangos en C++17.
Véase también QDirListing::DirEntry.
QDirListing::IteratorFlags QDirListing::iteratorFlags() const
Devuelve el conjunto de IteratorFlags utilizado para construir este QDirListing.
QString QDirListing::iteratorPath() const
Devuelve la ruta del directorio utilizado para construir este QDirListing.
QStringList QDirListing::nameFilters() const
Devuelve la lista de filtros glob de nombres de archivo utilizados para construir este QDirListing.
[noexcept] QDirListing &QDirListing::operator=(QDirListing &&other)
Mover-asigna other a este QDirListing.
Nota: El objeto movido-desde other se coloca en un estado parcialmente formado, en el que las únicas operaciones válidas son la destrucción y la asignación de un nuevo valor.
© 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.