3

在我可以继续执行递归目录/文件搜索之前,我想知道 Qt/PyQt 是否具有类似的os.walk.

主应用程序是 PyQt4 中的 GUI 应用程序,并且 a QStrings 和路径对象(文件、目录)中的所有文本字段都使用QFile, QDir,QFileinfo进行操作。

作为类比,我的意思是快速方便的递归 fs-tree 遍历工具。

我应该使用os.walk还是更快、信息量更大的东西?

PS。也许可以帮助我,但我不确定这是否比os.walk.

4

1 回答 1

3

我应该使用 os.walk 还是更快、信息量更大的东西?

没有,os.walk如果可以的话,我建议在 python 中使用。它和它一样好。

这不仅是因为 Qt 没有这种方便的方法,而且即使您基于 编写自己的机制QDir,您也可以访问所有三个变量,而无需像 with 那样手工制作os.walk

如果您对使用 Qt 感到绝望,那么您可以在下面我之前使用自己的以下遍历函数。

主文件

#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;
}

主程序

TEMPLATE = app
TARGET = qdir-traverse
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./qdir-traverse

然后,您将打印所有遍历的文件。您可以开始自定义它,然后进一步满足您的需求。

于 2014-02-24T07:06:41.573 回答