Какова реализация QDir::count()
По всему интернету кажется, что общепринятым способом подсчета количества дочерних элементов каталога является циклический просмотр его записей вручную и их подсчет. Это кажется слишком утомительным, и, как правило, существуют другие платформы и API, которые предлагают удобную функцию для получения количества дочерних элементов, одной из которых является QDir::count().
Существует ли POSIX API, который эффективно возвращает количество записей в каталоге? Если это так, я бы предположил, что это реализация QDir::count(). Если нет, то, возможно, это сделано так, как это делают многие люди, просматривая записи и подсчитывая их, если они уместны.
1 ответ
Внутренне QDir
перебирает каталог, читая записи в списке. QDir::count()
возвращает количество записей в этом списке (count()
будет заполнять список, если это еще не произошло).
Увидеть qtbase/src/corelib/io/qdir.cpp
для реализации
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; } }