From 3f455a4b53254b3ebbafae91600a63caebee3e0e Mon Sep 17 00:00:00 2001 From: Elvis Angelaccio Date: Mon, 12 Sep 2016 18:48:17 +0200 Subject: Introduce QDir::isEmpty() A directory is empty when it doesn't contain files or folders. We can exploit QDirIterator::hasNext() to check whether this is the case. This is efficient since it doesn't list the whole folder (in the non-empty case). Test cases are added for both the empty and non-empty cases. Change-Id: I0f7e26782c0f97f9c16f928dab6cae37927875d8 Reviewed-by: Thiago Macieira --- src/corelib/io/qdir.cpp | 20 ++++++++++++++++++++ src/corelib/io/qdir.h | 2 ++ 2 files changed, 22 insertions(+) (limited to 'src/corelib/io') diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 437f774547..37795ae5c4 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -1842,6 +1842,26 @@ bool QDir::exists(const QString &name) const return QFile::exists(filePath(name)); } +/*! + Returns whether the directory is empty. + + Equivalent to \c{count() == 0} with filters + \c{QDir::AllEntries | QDir::NoDotAndDotDot}, but faster as it just checks + whether the directory contains at least one entry. + + \note Unless you set the \p filters flags to include \c{QDir::NoDotAndDotDot} + (as the default value does), no directory is empty. + + \sa count(), entryList(), setFilter() + \since 5.9 +*/ +bool QDir::isEmpty(Filters filters) const +{ + const auto d = d_ptr.constData(); + QDirIterator it(d->dirEntry.filePath(), d->nameFilters, filters); + return !it.hasNext(); +} + /*! Returns a list of the root directories on this system. diff --git a/src/corelib/io/qdir.h b/src/corelib/io/qdir.h index ef7ec2c701..950a26f327 100644 --- a/src/corelib/io/qdir.h +++ b/src/corelib/io/qdir.h @@ -144,6 +144,8 @@ public: void setSorting(SortFlags sort); uint count() const; + bool isEmpty(Filters filters = Filters(AllEntries | NoDotAndDotDot)) const; + QString operator[](int) const; static QStringList nameFiltersFromString(const QString &nameFilter); -- cgit v1.2.3