Die neue Klasse QDirIterator scheint buggy zu sein...

Alles rund um die Programmierung mit Qt
Antworten
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Die neue Klasse QDirIterator scheint buggy zu sein...

Beitrag 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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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.
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Beitrag 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());
	}
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Antworten