使用 QDirIterator 递归遍历目录

Recursively iterating through directory using QDirIterator

本文关键字:遍历 递归 QDirIterator 使用      更新时间:2023-10-16

我正在尝试找出一种方法来递归迭代一个目录,该目录在程序运行时主动将新文件添加到其中。QDirIterator 可以很好地进行初始迭代,但似乎没有办法"刷新"QDirIterator,以便它再次遍历目录并提出更新的条目列表。有没有办法让QDirIterator"刷新",或者有没有更好的方法来完成我想要完成的事情?

这是我的代码片段:

QDirIterator dirIterator(directory,  QDir::AllEntries);
void MainWindow::on_Button_clicked()
{    
    if (dirIterator.hasNext()) {
        qDebug() << dirIterator.next();
        dirIterator.next();ui->imageChip1->setIcon(QIcon(dirIterator.next()));
            filename = dirIterator.fileName();
            filepath = dirIterator.filePath();
    }
}

此代码适用于初始化 QDirIterator 时目录中存在的任何条目,但不适用于初始化 QDirIterator 后添加到目录中的任何条目。

有没有办法让QDirIterator"刷新"或者有更好的方法 做我想完成的事情?

问题是,随着扫描用目录和文件结构填充迭代器对象,您无法获得新的文件系统更改。但是你绝对可以在Qt中找到帮助。它被称为QFileSystemWatcher。要实现您想要的功能,我将首先扫描目录并添加它们(或者可能只是一个根,取决于)来监视。仅监视目录的简单示例:如何使用 QFileSystemWatcher 监视文件夹的更改