繁体   English   中英

在Qt中遍历文件夹中的文件非常慢

[英]Iterating through files in folder is very slow in qt

我正在遍历文件夹中的所有文件(递归地通过其所有子文件夹),但这非常慢..它几乎永不返回。 我可以将其放在一个线程中,但即使如此,使用它也不可行。 这是我的功能

int MainWindow::searchXmlFiles(QString rootDir)
{
    xmlFileModel->clear(); // xmlFileModel is QStanardItemModel

    int count = 0;

    XmlFile xmlFile;
    QString xmlFilePath;

    QDirIterator iter( rootDir, QStringList() << "*.xml", QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);

    QDir dir( ui->lineEditSourceFolder->text() );

    while(iter.hasNext() )
    {
        qDebug() << iter.next();

        xmlFilePath = iter.filePath();

        xmlCollection = xmlFile.openXmlFile( xmlFilePath );

        QStandardItem * item = new QStandardItem( QIcon(":/icons/xmlfile.ico") , dir.relativeFilePath( xmlFilePath) );

        xmlFileModel->appendRow( item );

        count++;
    }

    QString fileCount = QString("Total of %1 file(s) will be converted from `%2` folder").arg( QString::number(count), rootDir);

    ui->labelXmlFileCount->setText( fileCount );

    return count;
}

这样的速度真的可以预期吗? 有没有办法更快地做同样的事情?

更新资料

在Jeremey发表评论之后,如果我评论循环中的所有工作(xmlFile.openXmlFile()和QStandardItem创建),它会变得非常快,大约需要3秒钟。 如果我将QStandardItem创建留在那里,大约需要7秒/

您可以使用QDir :: entryList()一次获取XML文件的完整列表,然后遍历文件名的QStringList。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM