QDir :: count()的实现是什么

时间:2014-06-17 20:42:15

标签: qt filesystems posix qdir

在整个互联网上,获得目录的子计数的可接受方式似乎是手动循环其条目并计算它们。这似乎太乏味了,通常还有其他框架和API提供便利功能来获取子计数,其中一个是QDir :: count()。

是否有POSIX API可以有效地返回目录中的条目数?如果是这样,我会想象这是QDir :: count()的实现。如果没有,那么也许它已经按照这么多人的方式完成了工作,循环查看条目并计算它们是否合适。

1 个答案:

答案 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;
        }
    }