我应该使用 os.walk 还是更快、信息更丰富的东西?
没有,我建议使用os.walk
如果可以的话,用Python。它已经尽善尽美了。
不仅仅是因为Qt没有这么方便的方法,而且即使你基于Qt编写自己的机制QDir
,您将可以访问所有三个变量,而无需像使用那样手工制作os.walk
.
如果你非常想使用 Qt,那么你可以使用下面我自己不久前使用过的遍历函数。
main.cpp
#include <QDir>
#include <QFileInfoList>
#include <QDebug>
void traverse( const QString& dirname )
{
QDir dir(dirname);
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
foreach (QFileInfo fileInfo, dir.entryInfoList()) {
if (fileInfo.isDir() && fileInfo.isReadable())
traverse(fileInfo.absoluteFilePath());
else
qDebug() << fileInfo.absoluteFilePath();
}
}
int main()
{
traverse("/usr/lib");
return 0;
}
或者针对大型目录和一般情况简化以下内容,因为它可以更好、更方便地扩展:
#include <QDirIterator>
#include <QDebug>
int main()
{
QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext())
qDebug() << it.next();
return 0;
}
main.pro
TEMPLATE = app
TARGET = qdir-traverse
QT = core
SOURCES += main.cpp
构建并运行
qmake && make && ./qdir-traverse
然后,您将打印所有遍历的文件。您可以开始自定义它,然后进一步满足您的需求。