QDirIterator 类

The QDirIterator class provides an iterator for directory entrylists. More...

头文件 #include <QDirIterator>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共类型

枚举IteratorFlag { NoIteratorFlags, Subdirectories, FollowSymlinks }
标志IteratorFlags

公共函数

QDirIterator(const QDir &dir, QDirIterator::IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString &path, QDirIterator::IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString &path, QDir::Filters filters, QDirIterator::IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDirIterator::IteratorFlags flags = NoIteratorFlags)
~QDirIterator()
QFileInfofileInfo() const
QStringfileName() const
QStringfilePath() const
boolhasNext() const
QStringnext()
(since 6.3) QFileInfonextFileInfo()
QStringpath() const

详细说明

您可以使用 QDirIterator 逐一导航目录中的条目。它与 QDir::entryList() 和 QDir::entryInfoList() 类似,但由于它一次只列出一个条目,而不是一次性列出所有条目,因此它可扩展性更好,更适合大目录。它还支持递归列出目录内容,并跟随符号链接。与 QDir::entryList() 不同,QDirIterator 不支持排序。

QDirIterator 构造函数接受一个 QDir 或目录作为参数。构建后,迭代器位于第一个目录条目之前。以下是按顺序遍历所有条目的方法

QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext()) {
    QString dir = it.next();
    qDebug() << dir;
    // /etc/.
    // /etc/..
    // /etc/X11
    // /etc/X11/fs
    // ...
}

以下是查找和读取按名称过滤的所有文件的递归方法

QDirIterator it("/sys", QStringList() << "scaling_cur_freq", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext()) {
    QFile f(it.next());
    f.open(QIODevice::ReadOnly);
    qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}

函数next()nextFileInfo()会移动迭代器并返回下一个目录条目的路径或QFileInfo。您还可以调用filePath()fileInfo()来获取当前文件路径或QFileInfo,而无需首先移动迭代器。fileName()函数仅返回文件名,类似于QDir::entryList()的工作方式。

与Qt的容器迭代器不同,QDirIterator是单向的(即,您不能按顺序遍历目录)且不允许随机访问。

另请参阅QDirQDir::entryList

成员类型文档

枚举QDirIterator::IteratorFlag
flags QDirIterator::IteratorFlags

此枚举描述了您可以将它们组合起来以配置QDirIterator行为的标志。

常数描述
QDirIterator::NoIteratorFlags0x0默认值,表示没有标志。迭代器将返回指定路径的条目。
QDirIterator::Subdirectories0x2还包括所有子目录中的条目列表。
QDirIterator::FollowSymlinks0x1当与Subdirectories组合时,此标志可以遍历指定路径的所有子目录,并跟踪所有符号链接。符号链接循环(例如,“链接”=>“.”或“链接”=>“..”)会自动检测并忽略。

IteratorFlags类型是QFlags<IteratorFlag>的typedef。它存储了IteratorFlag值的OR组合。

成员函数文档

QDirIterator::QDirIterator(const QDir &dir, QDirIterator::IteratorFlags flags = NoIteratorFlags)

构建一个QDirIterator,可以遍历dir的条目列表,使用dir的名称过滤器和正则过滤器。您可以通过flags传递选项来决定如何遍历目录。

默认情况下,flagsNoIteratorFlags,这提供了与QDir::entryList()相同的行为。

dir中的排序被忽略。

注意:要列出指向不存在文件的符号链接,必须将QDir::System传递给标志。

另请参阅hasNext(),next()和IteratorFlags

QDirIterator::QDirIterator(const QString &path, QDirIterator::IteratorFlags flags = NoIteratorFlags)

构建一个QDirIterator,可以遍历path。您可以通过flags传递选项来决定如何遍历目录。

默认情况下,flagsNoIteratorFlags,这提供了与QDir::entryList()相同的行为。

注意:要列出指向不存在文件的符号链接,必须将QDir::System传递给标志。

另请参阅hasNext(),next()和IteratorFlags

QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, QDirIterator::IteratorFlags flags = NoIteratorFlags)

构建一个QDirIterator,可以遍历path,没有名称过滤器和条目过滤器的filters。您可以通过flags传递选项来决定如何遍历目录。

默认情况下,filtersQDir::NoFilter,并且flagsNoIteratorFlags,这提供了与QDir::entryList()相同的行为。

注意:要列出指向不存在文件的符号链接,必须将QDir::System传递给标志。

另请参阅hasNext(),next()和IteratorFlags

QDirIterator::QDirIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDirIterator::IteratorFlags flags = NoIteratorFlags)

构建一个可以遍历pathQ_DIR迭代器,使用nameFiltersfilters。您可以通过flags传递选项来决定如何遍历目录。

默认情况下,flagsNoIteratorFlags,它提供与Q_DIR::entryList相同的行为。

例如,以下迭代器可以用于遍历音频文件

QDirIterator audioFileIt(audioPath, {"*.mp3", "*.wav"}, QDir::Files);

注意:要列出指向不存在文件的符号链接,必须将QDir::System传递给标志。

另请参阅hasNext(),next(),IteratorFlags,以及Q_DIR::setNameFilters

[noexcept] QDirIterator::~QDirIterator()

销毁Q_DIR

QFileInfo QDirIterator::fileInfo() const

返回当前目录条目的QFileInfo

另请参阅filePath()和fileName()。

QString QDirIterator::fileName() const

返回当前目录条目的文件名,不包含路径。

此函数在遍历单个目录时非常有用。当使用Q_DIRfilePath()来获取完整路径。

另请参阅filePath()和fileInfo()。

QString QDirIterator::filePath() const

返回当前目录条目的完整文件路径。

另请参阅fileInfo()和fileName()。

bool QDirIterator::hasNext() const

如果目录中至少还有一条条目,则返回true;否则返回false。

另请参阅next(),nextFileInfo(),fileName(),filePath()和fileInfo()。

QString QDirIterator::next()

将迭代器向前推进到下一个条目,并返回此新条目的文件路径。如果hasNext()返回false,则此函数不执行任何操作,并返回一个空的QString

您可以调用fileName()或filePath()来获取当前条目的文件名或路径,或调用fileInfo()来获取当前条目的QFileInfo

如果对QFileInfo感兴趣,请改为调用nextFileInfo()而不是next()。

另请参阅 hasNext(),nextFileInfo(),fileName(),filePath() 和 fileInfo()。

[自 6.3 版开始] QFileInfo QDirIterator::nextFileInfo()

将迭代器移动到下一个条目,并返回此新条目的文件信息。如果 hasNext() 返回 false,则此函数不执行任何操作,并返回一个空的 QFileInfo

您可以调用fileName()或filePath()来获取当前条目的文件名或路径,或调用fileInfo()来获取当前条目的QFileInfo

当您只需 filePath 时,请调用 next() 而不是 nextFileInfo()。

此函数是在 Qt 6.3 版中引入的。

另请参阅 hasNext(),fileName(),filePath() 和 fileInfo()。

QString QDirIterator::path() const

返回迭代器的基准目录。

© 2024 Qt 公司。这里包含的文档贡献归其各自的拥有者所有。此处提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 许可的。Qt 及其相关标志是芬兰的 Qt 公司和/或其他国家的注册商标。所有其他商标都是其各自拥有者的财产。