递归遍历一个目录在Qt中,跳过文件夹“.”和“..”。

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也会返回'.'和'..'目录。 这种设置会带来重大问题。
进入'.'时,它会两次或者甚至无限次(因为'.'始终是第一个元素)遍历整个目录。而使用'..'则会重新对父目录下的所有文件夹执行此过程。
我想要做到好看且流畅,有没有任何方法可以达成这个目的?还是唯一的方法是获取纯文件名(不包括路径)并将其与'.'和'..'进行比较?
1个回答

13

建议在您的entryInfoList中使用QDir::NoDotAndDotDot过滤器,如文档所述。

编辑

  • 不要忘记添加QDir::FilesQDir::DirsQDir::AllFiles来获取文件和/或目录,如此帖子所述。

  • 您也可以查看这个之前的问题


是的,正如此处所描述的那样,QT需要使用QDir,并且Filter需要通过QDir::AllEntries进行扩展。你仍然得到了“正确”的结果,因为你指引我朝着正确的方向。 谢谢 :) - ATaylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接