69#include <QtCore/qset.h>
71#if QT_CONFIG(regularexpression)
72#include <QtCore/qregularexpression.h>
75#include <QtCore/private/qfilesystemiterator_p.h>
76#include <QtCore/private/qfilesystementry_p.h>
77#include <QtCore/private/qfilesystemmetadata_p.h>
78#include <QtCore/private/qfilesystemengine_p.h>
79#include <QtCore/private/qfileinfo_p.h>
80#include <QtCore/private/qduplicatetracker_p.h>
93 void init(
bool resolveEngine);
104 std::unique_ptr<QAbstractFileEngine>
engine;
111#if QT_CONFIG(regularexpression)
112 QList<QRegularExpression> nameRegExps;
117#ifndef QT_NO_FILESYSTEMITERATOR
134#if QT_CONFIG(regularexpression)
154 if (entryInfo.isSymLink())
155 return entryInfo.canonicalFilePath();
157 return entryInfo.filePath();
175#ifndef QT_NO_FILESYSTEMITERATOR
177 if (entryInfo.fileInfoOpt)
178 fentry = &entryInfo.fileInfoOpt->d_ptr->fileEntry;
180 fentry = &entryInfo.entry;
183 qWarning(
"Qt was built with -no-feature-filesystemiterator: no files/plugins will be found!");
221 entryInfo.fileInfoOpt =
it->currentFileInfo();
231#ifndef QT_NO_FILESYSTEMITERATOR
236 while (
it =
nativeIterators.top().get(),
it->advance(entryInfo.entry, entryInfo.metaData)) {
258 if (!entryInfo.isDir())
262 if (!
iteratorFlags.testAnyFlags(F::FollowSymlinks) && entryInfo.isSymLink())
292 const bool dotOrDotDot =
fileName[0] == u
'.'
293 && ((fileNameSize == 1)
294 ||(fileNameSize == 2 &&
fileName[1] == u
'.'));
301#if QT_CONFIG(regularexpression)
304 auto regexMatchesName = [&
fileName](
const auto &re) {
305 return re.match(
fileName).hasMatch();
307 if (std::none_of(nameRegExps.cbegin(), nameRegExps.cend(), regexMatchesName))
314 if (skipSymlinks && entryInfo.isSymLink()) {
316 if (!includeSystem || entryInfo.exists())
322 if (!includeHidden && !dotOrDotDot && entryInfo.isHidden())
326 if (!includeSystem) {
327 if (!entryInfo.isFile() && !entryInfo.isDir() && !entryInfo.isSymLink())
329 if (entryInfo.isSymLink() && !entryInfo.exists())
335 if (skipDirs && entryInfo.isDir())
340 if (skipFiles && entryInfo.isFile())
347 if (filterPermissions) {
351 if ((doReadable && !entryInfo.isReadable())
352 || (doWritable && !entryInfo.isWritable())
353 || (doExecutable && !entryInfo.isExecutable())) {
366#if !defined(QT_NO_FILESYSTEMITERATOR)
392 d->initialEntryInfo.entry =
other->dirEntry;
393 d->nameFilters =
other->nameFilters;
394 d->filters =
other->filters;
395 d->iteratorFlags =
flags;
396 const bool resolveEngine =
other->fileEngine ? true :
false;
397 d->init(resolveEngine);
418 d->iteratorFlags =
flags;
436 d->iteratorFlags =
flags;
463 d->nameFilters = nameFilters;
465 d->iteratorFlags =
flags;
479 return d->initialEntryInfo.filePath();
570 return dirListPtr->currentEntryInfo.fileInfo();
575 return dirListPtr->currentEntryInfo.fileName();
580 return dirListPtr->currentEntryInfo.baseName();
585 return dirListPtr->currentEntryInfo.completeBaseName();
590 return dirListPtr->currentEntryInfo.suffix();
595 return dirListPtr->currentEntryInfo.bundleName();
600 return dirListPtr->currentEntryInfo.completeSuffix();
605 return dirListPtr->currentEntryInfo.filePath();
610 return dirListPtr->currentEntryInfo.canonicalFilePath();
615 return dirListPtr->currentEntryInfo.absoluteFilePath();
620 return dirListPtr->currentEntryInfo.absolutePath();
625 return dirListPtr->currentEntryInfo.isDir();
630 return dirListPtr->currentEntryInfo.isFile();
635 return dirListPtr->currentEntryInfo.isSymLink();
640 return dirListPtr->currentEntryInfo.exists();
645 return dirListPtr->currentEntryInfo.isHidden();
650 return dirListPtr->currentEntryInfo.isReadable();
655 return dirListPtr->currentEntryInfo.isWritable();
660 return dirListPtr->currentEntryInfo.isExecutable();
665 return dirListPtr->currentEntryInfo.size();
670 return dirListPtr->currentEntryInfo.fileTime(
type,
tz);
The QAbstractFileEngineIterator class provides an iterator interface for custom file engines.
\inmodule QtCore\reentrant
bool entryMatches(QDirEntryInfo &info)
QDirListing::IteratorFlags iteratorFlags
std::unique_ptr< QAbstractFileEngineIterator > FEngineIteratorPtr
void pushInitialDirectory()
void checkAndPushDirectory(QDirEntryInfo &info)
std::unique_ptr< QFileSystemIterator > FsIteratorPtr
std::unique_ptr< QAbstractFileEngine > engine
bool hasIterators() const
std::stack< FsIteratorPtr, std::vector< FsIteratorPtr > > nativeIterators
std::stack< FEngineIteratorPtr, std::vector< FEngineIteratorPtr > > fileEngineIterators
bool matchesFilters(QDirEntryInfo &data) const
QDirEntryInfo initialEntryInfo
QDuplicateTracker< QString > visitedLinks
QDirEntryInfo currentEntryInfo
void pushDirectory(QDirEntryInfo &info)
void init(bool resolveEngine)
QFileInfo fileInfo() const
QString absoluteFilePath() const
QString bundleName() const
QString completeBaseName() const
QString completeSuffix() const
bool isExecutable() const
QDateTime fileTime(QFile::FileTime type, const QTimeZone &tz) const
QString canonicalFilePath() const
QString absolutePath() const
Q_CORE_EXPORT const_iterator & operator++()
Advances the iterator and returns a reference to it.
IteratorFlag
This enum class describes flags can be used to configure the behavior of QDirListing.
const_iterator begin() const
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::...
~QDirListing()
Destroys the QDirListing.
QString iteratorPath() const
Returns the directory path used to construct this QDirListing.
static std::unique_ptr< QAbstractFileEngine > createLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data)
static QRegularExpression fromWildcard(QStringView pattern, Qt::CaseSensitivity cs=Qt::CaseInsensitive, WildcardConversionOptions options=DefaultWildcardConversion)
\macro QT_RESTRICTED_CAST_FROM_ASCII
const QChar * constData() const
Returns a pointer to the data stored in the QString.
qsizetype size() const noexcept
Returns the number of characters in this string.
QSet< QString >::iterator it
Combined button and popup list for selecting options.
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLsizei const GLchar *const * path
const QStringList filters({"Image files (*.png *.xpm *.jpg)", "Text files (*.txt)", "Any files (*)" })
[6]