Seite 1 von 1

Die neue Klasse QDirIterator scheint buggy zu sein...

Verfasst: 15. Juni 2007 16:41
von gerome69
Habe mal folgendes mit dieser neu in Qt 4.3 eingeführten Klasse getestet:

Code: Alles auswählen

QStringList fileNameFilter;
fileNameFilter.append("*.h");
fileNameFilter.append("*.cpp");

QDirIterator *dirIterator=new QDirIterator(QString("c:/test/"), fileNameFilter, QDir::Files, QDirIterator::Subdirectories);

while (dirIterator->hasNext()) {
      printf("%s\n", QString(dirIterator->next()).toAscii().data());
}
So findet er nur Dateien, die direkt in c:/test liegen.
Das "QDirIterator::Subdirectories" greift nicht wirklich, weil er damit offensichtlich nur in Unterverzeichnisse springt, die eben durch den fileNameFilter erlaubt sind. Da es aber keine Unterverzeichnisse gibt, die diesen Kriterien entsprechen, wird nichts aus Unterverzeicnissen angezeigt.

Ich hab auch mit "c:\\test\\" als Startverzeichnis getestet => gleiches Ergebnis.

Sehe gerade das ganze hier bestätigt mit dem Status "Won't fix":
http://trolltech.com/developer/task-tra ... &id=162041

Gruß, Gérôme
So ist diese ganze Klasse dann aber völlig unsinnig, finde ich.

Verfasst: 18. Juni 2007 09:42
von RHBaum
So ist diese ganze Klasse dann aber völlig unsinnig
Naja, ich denke das der gewuenschte Vorteil dieser ganzen QFile, QDir klassen etc, mehr auf plattformunabhaengigkeit zielt, als dem user tonnenweisse komfort zur verfuegung zu stellen.

Ciao ...

Verfasst: 18. Juni 2007 09:49
von gerome69
RHBaum hat geschrieben:
So ist diese ganze Klasse dann aber völlig unsinnig
Naja, ich denke das der gewuenschte Vorteil dieser ganzen QFile, QDir klassen etc, mehr auf plattformunabhaengigkeit zielt, als dem user tonnenweisse komfort zur verfuegung zu stellen.

Ciao ...
Vielleicht,
aber ich würde mir schon einen FileFilter und einen DirFilter separat wünschen (letzterer ja in der Regel eh auf "*.*"), um das Dos-Kommando "dir /s /b", dessen Ausgabe ich zur Zeit einfach parse zu ersetzen.
Ich denke, ich schreibe mir selbst eine abgeleitete Klasse von QDirIterator.

B.

Verfasst: 18. Juni 2007 11:08
von NoobSaibot
Als QDir::Filters übergibst Du QDir::Files. Deshalb sieht er keine Verzeichnisse. Du solltest QDir::AllEntries übergeben, dann wird er wohl auch in die Unterverzeichnisse gehen. Da wird der Dateifilter aber nicht mehr greifen, wenn ich die Bugbeschreibung richtig verstanden hab.

Verfasst: 19. Juni 2007 10:26
von bst
Hi,

QDir::AllDirs | QDir::Files scheint alle Verzeichnisse und die auf den Filter matchenden Dateien zu liefern.

cu, Bernd
--

Code: Alles auswählen

	QStringList fileNameFilter;
	fileNameFilter.append("*.h");
	fileNameFilter.append("*.cpp");

	QDirIterator *dirIterator = new QDirIterator(QString("e:/test/"), fileNameFilter, QDir::AllDirs | QDir::Files, QDirIterator::Subdirectories);

	while (dirIterator->hasNext()) 
	{
		dirIterator->next();
		if ( dirIterator->fileInfo().isFile() )
			printf("%s\n", dirIterator->filePath().toAscii().data());
	}

Verfasst: 19. Juni 2007 10:45
von gerome69
bst hat geschrieben:Hi,
QDir::AllDirs | QDir::Files scheint alle Verzeichnisse und die auf den Filter matchenden Dateien zu liefern.
Danke, Gérôme