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

标签 qt filesystems posix qdir

在整个互联网上,获取目录子项计数的公认方法似乎是手动循环其条目并对其进行计数。这看起来太乏味了,通常还有其他框架和 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/

相关文章:

c++ - 创建 std::pair<A,B> 时出现“operator<”错误

java - 用于重命名文件的 Gradle 任务

c - sigaddset 有什么用?

python - concurrent.futures 和 POSIX Linux 中异步 I/O 的区别

c++ - Qt 无法将静态库中的 *​​.h 包含到我的程序中

c++ - 为什么信号和槽比普通的旧回调更好?

c - Qt 5.2.1 出现错误 “collect2.exe: Id returned 1 exit status”

filesystems - 什么是各种平台的保留文件名?

filesystems - 嵌入式文件系统和断电

c - 绑定(bind)到 fe80::%<范围>