Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Dateien / Laufwerke (https://www.delphipraxis.net/41-library-dateien-laufwerke/)
-   -   Delphi FindAllFiles mit Fortschritt (https://www.delphipraxis.net/52882-findallfiles-mit-fortschritt.html)

Luckie 6. Sep 2005 08:00


FindAllFiles mit Fortschritt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Endlich ist sie da, die langersehnte Dateisuche mit Fortschrittsanzeige. ;)

Erstmal der Code (siehe Anhang, inkl. Demo), dann die Erklärungen.

Erstmal zur Prozedur FindAllFiles: Ich wollte möglichst ohne die Unit Classes auskommen und habe mich deshalb entschieden die Dateien nicht in eine StringListe zu schreiben, sondern eine Nachricht zu schicken, welche den Dateinamen bzw. den Ordner und den wievielten Ordner enthält.

Die Idee: Will man den Fortschritt anzeigen, muss man irgendwie einen Maximalwert haben. Ich habe mich dafür entschieden die Anzahl der Ordner zu nehmen. Die Anzahl der Ordner wird mit der Prozedur CountFolders ermittelt und in der globalen Variable CntFolders gespeichert. In der Prozedur FindAllFiles wird nun bei jedem gefundenen Ordner die Variavle NumFolder erhöht, damit man weiß, wie viele Ordner man schon durchsucht hat.

Da ich mit globalen Variablen arbeite, ist es wichtig diese entsprechend zu initialisieren. Dies geschieht mit der Prozedur FindAllFilesInit. Hier werden die Variablen mit 0 initialisiert. Es ist also erstmal wichtig diese Prozedur aufzurufen und dann mit CountFolders die Anzahl der Ordner zu ermitteln, wenn man einen Fortschritt haben will. Durchsucht man nicht gerade die ganze Systempartition, ist der Performanceverlust eigentlich noch akzeptabel. Natürlich kann man die Prozedur FindAllFiles auch nutzen ohne den Fortschritt anzuzeigen, wenn man auf die Performance wertlegt.

Legt man keinen Wert darauf nonVCL kompatibel zu sein, kann man natürlich alles in eine Klasse packen und elegant mit Eregnissen arbeiten.

Auf die Idee bin ich gekommen, als ich mich gefragt habe, wie TuneupUtilities das macht und ich gesehen habe, wie Tuneup Utilities vor der eigentlichen Suche in einem Label "Initialisieren..." anzeigt. Da habe ich mich gefagt, "was initialisiert der da wohl?" Nun ja, ich habe mir dann überlegt, dass er eigentlich nur einen maximal Wert für den Fortschritt ermitteln kann in dieser Zeit.

Sollte jemand eine bessere Idee haben, dann bin ich für jeden Verbesserungsvorschlag offen.

Im Anhang noch ein Demo Projekt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz