在整个互联网上,获取目录子项计数的公认方法似乎是手动循环其条目并对其进行计数。这看起来太乏味了,通常还有其他框架和 API 提供了一个方便的函数来获取子计数,其中之一是 QDir::count()。
是否有一个 POSIX API 可以有效地返回目录中的条目数?如果是这样,我想这就是 QDir::count() 的实现。如果没有,那么也许它是按照很多人正在做的方式完成的,循环遍历条目并计算它们是否合适。
最佳答案
在内部,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; } }
关于qt - QDir::count() 的实现是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272924/