[英]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.