8

我在使用 Qt 函数递归遍历目录时遇到了一点麻烦。我正在尝试做的事情:

打开指定目录。遍历目录,每次遇到另一个目录时,打开该目录,遍历文件等。

现在,我将如何处理:

QString dir = QFileDialog::getExistingDirectory(this, "Select directory");
if(!dir.isNull()) {
    ReadDir(dir);
}

void Mainwindow::ReadDir(QString path) {
    QDir dir(path);                            //Opens the path
    QFileInfoList files = dir.entryInfoList(); //Gets the file information
    foreach(const QFileInfo &fi, files) {      //Loops through the found files.
        QString Path = fi.absoluteFilePath();  //Gets the absolute file path
        if(fi.isDir()) ReadDir(Path);          //Recursively goes through all the directories.
        else {
            //Do stuff with the found file.
        }
    }
}

现在,我面临的实际问题是:自然,entryInfoList 也会返回“。” 和“..”目录。使用这种设置,这被证明是一个主要问题。

通过进入“.”,它将遍历整个目录两次,甚至无限次(因为“.”始终是第一个元素),使用“..”它将为父目录下的所有文件夹重做该过程。

我想做这个漂亮又时尚,有什么办法可以解决这个问题,我不知道吗?或者是唯一的方法,我得到纯文件名(没有路径)并对照'。'检查它。和 '..'?

4

1 回答 1

13

您应该尝试使用QDir::NoDotAndDotDot您的过滤器entryInfoList,如文档中所述。

编辑

  • 不要忘记添加QDir::Files、 或QDir::DirsQDir::AllFiles获取文件和/或目录,如本文所述。

  • 您可能还想检查这个先前的问题

于 2012-08-28T11:48:38.703 回答