Tengo un pequeño problema al usar las funciones de Qt para recorrer un directorio recursivamente. Lo que estoy tratando de hacer:Camina un directorio de forma recursiva en Qt, omite las carpetas "." y ".."
Abra un directorio específico. Paseo por el directorio, y cada vez que encuentra otro directorio, abra ese directorio, caminar a través de los archivos, etc.
Ahora, cómo voy sobre esto:
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.
}
}
}
Ahora, el problema real Me enfrento: Naturalmente, entryInfoList también devolvería el '.' y directorios '..'. Con esta configuración, esto demuestra un problema importante.
Al entrar en '.', Pasará por todo el directorio dos veces, o incluso infinitamente (porque '.' Siempre es el primer elemento), con '..' reharía el proceso para todas las carpetas debajo del directorio de padres.
Me gustaría hacer esto bien y elegante, ¿hay alguna manera de hacer esto, no estoy al tanto? O es la única manera, que obtengo el nombre de archivo simple (sin la ruta) y lo compruebo con '.' y '..'?
Sí, y como se describe [aquí] (http://www.qtcentre.org/threads/19085-QDir-entryInfoList-and-NoDotAndDotDot-filter), el intervalo QT es necesario que haya QDir, y el filtro necesita ser expandido con QDir :: AllEntries. Todavía estás obteniendo lo "correcto", porque me apuntaste en la dirección correcta. Gracias :) – ATaylor
Thx, actualicé la respuesta en consecuencia. –