使用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也会返回'。'和'..'目录。通过这种设置,这证明是一个主要问题。
通过进入'。',它将遍历整个目录两次,甚至是无限的(因为'。'始终是第一个元素),使用'..'它将重做父进程下的所有文件夹的进程。目录
我想做到这一点好看又圆滑,有什么方法可以解决这个问题,我不知道吗?或者是唯一的方法,我得到纯文件名(没有路径)并检查对'。'和'..'?
答案 0 :(得分:13)
您应该尝试使用QDir::NoDotAndDotDot
中的entryInfoList
过滤器,如documentation中所述。
修改强>
不要忘记添加QDir::Files
或QDir::Dirs
或QDir::AllFiles
来获取文件和/或目录,如in this post所述。< / p>
您可能还想查看this previous question。