Frage

Gibt es eine Möglichkeit (auf Windows mit Delphi 2010) die Anzahl der Dateien in einem Verzeichnis anlegen erhalten, ohne tatsächlich alle Dateien durchlaufen?

Ich möchte einen Fortschrittsbalken während einiger Dateisystem Indexierungsvorgang implementieren. Aus diesem Grunde muß ich wissen, wie viele Dateien im Verzeichnis ist.

Was ist der schnellste Weg, um die Anzahl der Dateien in einem Verzeichnis zu bekommen?

War es hilfreich?

Lösung

Ich denke, der schnellste Weg, um die TDirectory.GetFiles Methode in IOutils.pas gelegen zu verwenden. Da die Anzahl der (sichtbaren) Dateien in einem Verzeichnis für jeden Benutzer unterschiedlich sein können, gibt es nur eine kleine Chance, dass es nur eine Zahl ist irgendwie abzurufen.

Der Findfirst / Findnext Ansatz (die in dem obigen Verfahren gewickelt wird) nicht wirklich Querungs Dateien, es durchläuft nur Einträge in einer Tabelle, so dass es schneller sein könnte als erwartet.

Andere Tipps

Wenn Sie unter Windows 7 oder Server 2008 R2 ausgeführt wird, empfehle ich die Findfirst und FindMatchingFile Funktionen von SysUtils Extrahieren und Hacking der ehemaligen FindFirstFileEx verwenden anstelle von Findfirstfile. Dann können Sie die zusätzlichen Flags Parameter auf 2 (definiert in MSDN als FIND_FIRST_EX_LARGE_FETCH) gesetzt mit dieser Einstellung bedingt auf (Win32majorversion = 6) und (Win32minorversion> = 1), für den Augenblick.

Diese Einstellung erzeugt eine sehr deutliche Geschwindigkeitserhöhung für Findfirst / Findnext auf diesem OS-Schleifen. Geben Sie für FindFirstFileEx auf MSDN, um weitere Informationen, wie die neueste Dokumentation ist nicht in der Dokumentation Microsoft von Delphi Hilfe abgerufen werden.

TDirectory.GetFiles scheint schließlich Findfirst zu nennen, so werden Ihnen vielen Vorteil nicht kaufen außer Ihren eigenen Code zu vereinfachen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top