2

在整个互联网上,似乎公认的获取目录子项计数的方法是手动遍历其条目并对其进行计数。这似乎太乏味了,通常还有其他框架和 API 提供了方便的函数来获取子计数,其中之一是 QDir::count()。

是否有一个 POSIX API 可以有效地返回目录中的条目数?如果是这样,我想这是 QDir::count() 的实现。如果不是,那么也许它是按照很多人这样做的方式完成的,循环遍历条目并在合适的情况下对它们进行计数。

4

1 回答 1

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;
        }
    }
    
于 2014-06-17T20:50:58.523 回答