在整个互联网上,获得目录的子计数的可接受方式似乎是手动循环其条目并计算它们。这似乎太乏味了,通常还有其他框架和API提供便利功能来获取子计数,其中一个是QDir :: count()。
是否有POSIX API可以有效地返回目录中的条目数?如果是这样,我会想象这是QDir :: count()的实现。如果没有,那么也许它已经按照这么多人的方式完成了工作,循环查看条目并计算它们是否合适。
答案 0 :(得分:4)
在内部,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;
}
}