在我可以继续实现递归目录/文件搜索并对某些任务进行一些过滤之前,我想知道Qt/PyQt是否有类似os.walk
。
主应用程序是 PyQt4 中的 GUI 应用程序,QString
s 和路径对象(文件、目录)中的所有文本字段都使用 QFile
、QDir
、 QFileinfo
进行操作。
作为模拟,我的意思是快速方便的递归 fs 树遍历工具。
我应该使用os.walk
还是更快、信息量更大的东西?
附言。也许这可以帮助我,但我不确定这是否比os.walk
更有效。
我应该使用 os.walk 还是更快、信息量更大的东西?
没有,如果可以的话,我建议在python中使用os.walk
。它就像它得到的那样好。
这不仅是因为Qt没有这种方便的方法,而且即使您基于QDir
编写自己的机制,您也可以访问所有三个变量,而无需像os.walk
那样手工制作。
如果你对使用Qt感到绝望,那么你可以在下面有以下遍历函数,我前段时间用过自己。
主.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
然后,您将获得所有遍历的文件。您可以开始自定义它,然后进一步满足您的需求。