Mam małe problemy z używaniem funkcji Qt do przechodzenia przez katalog rekursywnie. Co próbuję wykonać:Przejdź się rekurencyjnie do katalogu w Qt, pomiń foldery "." i ".."
Otwórz określony katalog. Spacer po katalogu i za każdym razem napotka inny katalog, należy otworzyć ten katalog, chodzić plików itp
Teraz, jak idę na ten temat:
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.
}
}
}
Teraz rzeczywisty problem Mam do czynienia: Oczywiście, entryInfoList również zwróci wartość "." i katalogi "..". Dzięki tej konfiguracji jest to poważny problem.
Po przejściu do "." Przejrzałaby cały katalog dwa razy lub nawet nieskończenie (ponieważ "." Jest zawsze pierwszym elementem), z ".." ponawiałoby proces dla wszystkich folderów pod nadrzędna Lokalizacja.
Chciałbym zrobić to ładne i eleganckie, czy jest jakiś sposób, aby przejść o tym, nie jestem świadomy? Lub jest to jedyny sposób, że otrzymuję zwykłą nazwę pliku (bez ścieżki) i sprawdzam, czy jest to znak "." i '..'?
Tak, i jak opisano [tutaj] (http://www.qtcentre.org/threads/19085-QDir-entryInfoList-and-NoDotAndDotDot-filter), QT musi być QDir, a filtr należy rozszerzyć o QDir :: AllEntries. Wciąż dostajesz "poprawne", ponieważ wskazałeś mi właściwy kierunek. Dziękuję :) – ATaylor
Thx, zaktualizowałem odpowiedź odpowiednio. –