All over the internet it seems the accepted way of getting a directory's child count is to loop through its entries manually and count them. This seems far too tedious and generally there are other frameworks and API's that offer a convenience function to get child counts, one of them being QDir::count().
Is there a POSIX API that returns the number of entries in a directory efficiently? If so, I would imagine that this is the implementation of QDir::count(). If not, then perhaps it's done the way so many people are doing it, looping through the entries and counting them if they're appropriate.
Internally, QDir
iterates over the directory reading the entries into a list. QDir::count()
returns the number of entries in that list (count()
will populate the list if that hasn't happened yet).
See qtbase/src/corelib/io/qdir.cpp
for the implementation of
QDir::count()
:
uint QDir::count() const
{
const QDirPrivate* d = d_ptr.constData();
d->initFileLists(*this);
return d->files.count();
}
QDirPrivate::initFileLists()
:
inline void QDirPrivate::initFileLists(const QDir &dir) const
{
if (!fileListsInitialized) {
QFileInfoList l;
QDirIterator it(dir);
while (it.hasNext()) {
it.next();
l.append(it.fileInfo());
}
sortFileList(sort, l, &files, &fileInfos);
fileListsInitialized = true;
}
}