Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QDirListing Class Reference

The QDirListing class provides an STL-style iterator for directory entries. More...

#include <qdirlisting.h>

+ Collaboration diagram for QDirListing:

Classes

class  const_iterator
 
class  DirEntry
 

Public Types

enum class  IteratorFlag { NoFlag = 0x0 , FollowSymlinks = 0x1 , Recursive = 0x2 }
 This enum class describes flags can be used to configure the behavior of QDirListing. More...
 

Public Member Functions

 QDirListing (const QDir &dir, IteratorFlags flags=IteratorFlag::NoFlag)
 Constructs a QDirListing that can iterate over dir's entries, using dir's name filters and the QDir::Filters set in dir.
 
 QDirListing (const QString &path, IteratorFlags flags=IteratorFlag::NoFlag)
 Constructs a QDirListing that can iterate over path.
 
 QDirListing (const QString &path, QDir::Filters filter, IteratorFlags flags=IteratorFlag::NoFlag)
 Constructs a QDirListing that can iterate over path.
 
 QDirListing (const QString &path, const QStringList &nameFilters, QDir::Filters filters=QDir::NoFilter, IteratorFlags flags=IteratorFlag::NoFlag)
 Constructs a QDirListing that can iterate over path, using nameFilters and filters.
 
 ~QDirListing ()
 Destroys the QDirListing.
 
QString iteratorPath () const
 Returns the directory path used to construct this QDirListing.
 
const_iterator begin () const
 
const_iterator cbegin () const
 
const_iterator end () const
 
const_iterator cend () const
 begin()/cbegin() returns a QDirListing::const_iterator that enables iterating over directory entries using a ranged-for loop; dereferencing this iterator returns a {const QFileInfo &}.
 
const_iterator constBegin () const
 
const_iterator constEnd () const
 

Friends

class QDir
 

Detailed Description

The QDirListing class provides an STL-style iterator for directory entries.

Since
6.8

\inmodule QtCore

You can use QDirListing to navigate entries of a directory one at a time. It is similar to QDir::entryList() and QDir::entryInfoList(), but because it lists entries one at a time instead of all at once, it scales better and is more suitable for large directories. It also supports listing directory contents recursively, and following symbolic links. Unlike QDir::entryList(), QDirListing does not support sorting.

The QDirListing constructor takes a QDir or a directory path as argument. Here's how to iterate over all entries recursively:

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

Here's how to find and read all files filtered by name, recursively:

QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s},
QDir::NoFilter, ItFlag::Recursive);
for (const auto &dirEntry : dirList) {
QFile f(dirEntry.filePath());
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}

Iterators constructed by QDirListing (QDirListing::const_iterator) are forward-only (you cannot iterate directories in reverse order) and don't allow random access. They can be used in ranged-for loops (or with STL alogrithms that don't require random access iterators). Dereferencing a valid iterator returns a QDirListing::DirEntry object. The (c)end() iterator marks the end of the iteration. Dereferencing the end iterator is undefiend behavior.

QDirListing::DirEntry offers a subset of QFileInfo's API (for example, fileName(), filePath(), exists()). Internally, DirEntry only constructs a QFileInfo object if needed, that is, if the info hasn't been already fetched by other system functions. You can use DirEntry::fileInfo() to get a QFileInfo. For example:

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 implemnetation) the fileName could
// be known already
if (dirEntry.fileInfo().fileName().endsWith(u".conf")) { /* ... */ }
}
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 */) { /* ... */ }
}
See also
QDir, QDir::entryList()

Definition at line 17 of file qdirlisting.h.

Member Enumeration Documentation

◆ IteratorFlag

enum class QDirListing::IteratorFlag
strong

This enum class describes flags can be used to configure the behavior of QDirListing.

These flags can be bitwise OR'ed together.

\value NoFlag The default value, representing no flags. The iterator will return entries for the assigned path.

\value FollowSymlinks When combined with Recursive, this flag enables iterating through all subdirectories of the assigned path, following all symbolic links. Symbolic link loops (e.g., link => . or link => ..) are automatically detected and ignored.

\value Recursive List entries inside all subdirectories as well.

Enumerator
NoFlag 
FollowSymlinks 
Recursive 

Definition at line 20 of file qdirlisting.h.

Constructor & Destructor Documentation

◆ QDirListing() [1/4]

QDirListing::QDirListing ( const QDir & dir,
IteratorFlags flags = IteratorFlag::NoFlag )

Constructs a QDirListing that can iterate over dir's entries, using dir's name filters and the QDir::Filters set in dir.

You can pass options via flags to decide how the directory should be iterated.

By default, flags is NoIteratorFlags, which provides the same behavior as in QDir::entryList().

The sorting in dir is ignored.

Note
To list symlinks that point to non existing files, QDir::System must be set in dir's QDir::Filters.
See also
hasNext(), next(), IteratorFlags

Definition at line 388 of file qdirlisting.cpp.

References QString::constData(), dir, and other().

+ Here is the call graph for this function:

◆ QDirListing() [2/4]

QDirListing::QDirListing ( const QString & path,
IteratorFlags flags = IteratorFlag::NoFlag )

Constructs a QDirListing that can iterate over path.

You can pass options via flags to decide how the directory should be iterated.

By default, flags is NoIteratorFlags, which provides the same behavior as in QDir::entryList().

See also
hasNext(), next(), IteratorFlags

Definition at line 431 of file qdirlisting.cpp.

References QDir::NoFilter.

◆ QDirListing() [3/4]

QDirListing::QDirListing ( const QString & path,
QDir::Filters filters,
IteratorFlags flags = IteratorFlag::NoFlag )

Constructs a QDirListing that can iterate over path.

Entries are filtered according to filters. You can pass options via flags to decide how the directory should be iterated.

By default, filters is QDir::NoFilter, and flags is NoIteratorFlags, which provides the same behavior as in QDir::entryList().

Note
To list symlinks that point to non existing files, QDir::System must be set in filters.
See also
hasNext(), next(), IteratorFlags

Definition at line 413 of file qdirlisting.cpp.

References filters.

◆ QDirListing() [4/4]

QDirListing::QDirListing ( const QString & path,
const QStringList & nameFilters,
QDir::Filters filters = QDir::NoFilter,
IteratorFlags flags = IteratorFlag::NoFlag )

Constructs a QDirListing that can iterate over path, using nameFilters and filters.

You can pass options via flags to decide how the directory should be iterated.

By default, flags is NoIteratorFlags, which provides the same behavior as QDir::entryList().

For example, the following iterator could be used to iterate over audio files:

Note
To list symlinks that point to non existing files, QDir::System must be set in flags.
See also
hasNext(), next(), IteratorFlags, QDir::setNameFilters()

Definition at line 458 of file qdirlisting.cpp.

References filters.

◆ ~QDirListing()

QDirListing::~QDirListing ( )
default

Destroys the QDirListing.

Member Function Documentation

◆ begin()

QDirListing::const_iterator QDirListing::begin ( ) const

Definition at line 507 of file qdirlisting.cpp.

References it.

Referenced by QDirIteratorPrivate::init().

+ Here is the caller graph for this function:

◆ cbegin()

QDirListing::const_iterator QDirListing::cbegin ( ) const
inline

Definition at line 100 of file qdirlisting.h.

References begin().

+ Here is the call graph for this function:

◆ cend()

QDirListing::const_iterator QDirListing::cend ( ) const
inline

begin()/cbegin() returns a QDirListing::const_iterator that enables iterating over directory entries using a ranged-for loop; dereferencing this iterator returns a {const QFileInfo &}.

end()/cend() return a sentinel const_iterator that signals the end of the iteration. Dereferencing this iterator is undefined behavior.

For example:

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

Here's how to find and read all files filtered by name, recursively:

QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s},
QDir::NoFilter, ItFlag::Recursive);
for (const auto &dirEntry : dirList) {
QFile f(dirEntry.filePath());
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}
Note
As this is a unidirectional (forward-only) iterator, calling begin()/cbegin() more than once on the same QDirListing object could result in unexpected behavior (for example, some entries being skipped).
See also
fileInfo(), fileName(), filePath()

Definition at line 102 of file qdirlisting.h.

◆ constBegin()

const_iterator QDirListing::constBegin ( ) const
inline

Definition at line 105 of file qdirlisting.h.

References begin().

+ Here is the call graph for this function:

◆ constEnd()

const_iterator QDirListing::constEnd ( ) const
inline

Definition at line 106 of file qdirlisting.h.

◆ end()

QDirListing::const_iterator QDirListing::end ( ) const
inline

Definition at line 101 of file qdirlisting.h.

Referenced by QDirIteratorPrivate::advance(), QDirIterator::hasNext(), and QDirIteratorPrivate::init().

+ Here is the caller graph for this function:

◆ iteratorPath()

QString QDirListing::iteratorPath ( ) const

Returns the directory path used to construct this QDirListing.

Definition at line 477 of file qdirlisting.cpp.

Referenced by QDirIterator::path().

+ Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ QDir

friend class QDir
friend

Definition at line 112 of file qdirlisting.h.


The documentation for this class was generated from the following files: