Entwickler-Ecke
Dateizugriff - Anzahl der Dateien auf Laufwerk ermittlen?
Akut-Programming - Di 26.08.03 21:00
Titel: Anzahl der Dateien auf Laufwerk ermittlen?
Ist es möglich alle Dateien auf einem Laufwerk zu zählen? Es sollte schnell gehen, da ich es in einer Suche(Progressbar) verwenden will.
Delete - Di 26.08.03 21:24
FINDFIRST,
FINDNEXT. Und bitte mal einen Blick in die FAQ werfen.
MSCH - Di 26.08.03 21:33
jeap geht, aber schnelligkeit hängt von Platte und Rechner ab:
schau dir mal FindFirst() und FindNext() an. Das sind die gesuchten Funktionen. Dann das ganze noch etwas rekursiv verbasteln und fertig.
zum bleistift so:
(ich habs mal aus meinen Threadcode rauskopiert):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure TScanDir.Execute; var I: Integer; begin for I:=Ord('C') to Ord('Z') do begin if terminated then break; LeseVerzeichnis(Chr(I)+':\'); end; end;
procedure TScanDir.LeseVerzeichnis(Dir: String); var SR: TSearchRec; I: Integer; begin sucheDateien(dir); I:= FindFirst(IncludeTrailingBackslash(dir)+'*.*',faAnyFile,SR); while I=0 do begin if (SR.Attr and faDirectory = faDirectory)and (SR.Name<>'.')and(SR.Name<>'..') then LeseVerzeichnis(IncludeTrailingBackslash(Dir)+SR.Name); I:= FindNext(SR); end; FindClose(SR); end;
procedure TScanDir.SucheAlleDateien(_Dir:String); var SR:TSearchRec; I:Integer; begin I:= FindFirst( IncludeTrailingBackslash(_Dir)+'*.*',FaAnyFile and not faDirectory,SR); while I=0 do begin I:= FindNext(SR); end; FindClose(SR); end; |
grez
msch
//EDIT da war ich etwas zu spät //EDIT
Akut-Programming - Mi 27.08.03 14:24
Sorry MSCH, aber dat funzt nich so richtig.
Hier nochma meine Problematik:
Ich will in meinem "DateiBrowser" eine Suchfunktion einbauen. Das suchen ansich klappt auch schon supi. Nur will ich dem Nutzer auch zeigen können, das gerade gesucht wird. Ich hatte es mir so vorgestellt, das ich bei jeden Start der Suche den maximal Wert meiner Progressbar auf die Anzahl der Dateien auf dem gewählten Laufwerk setzte und somit eben die ProgressBar genau dann beim max Wert stoppt, wenn die Suche beendet ist. Ist das so möglich oder stell ich es mir zu einfach vor? :roll:
Delete - Mi 27.08.03 14:39
Ist nicht möglich. Die Anzahl der Dateioen weißt du ja nicht, bzw. erst, wenn du sie alle gefunden hast.
Nicht umsonst nimmt MS selber diese kleine AVI-Datei mit der suchenden Lupe, um den Suchvorgang zu visualisieren.
Gausi - Mi 27.08.03 14:47
Kann man das mit der Statusbar nicht über die Dateigröße machen?
Also den belegten Speicherplatz des Laufwerkes mit DiskSize und DiskFree ermitteln. Bei einer gefundenen Datei die Größe mit Filesize bestimmen, zu den bisher abgearbeiteten Bytes hinzuzählen und daraus den Wert der Progressbar bestimmen.
Frag mich aber nicht, um wieviel die Suche dadurch langsamer wird. Probier mal aus, ob sich da an der Geschwindigkeit was tut...
Akut-Programming - Mi 27.08.03 14:52
Wenn ich einfach nur die Gesamtzahl der Bytes jeder Datei nehmen würde, hätt ich am Ende eine rießen Zahl, zumindest wenn es in byte bleibt, durch die die Progressbar nicht so schnell am ende sein ankommt.
:lol: Ich kann dann nachner Datei suchen und in ner Woche bekomm ich das Ergebnis :lol:
Aber die Idee mit dem der DiskSize gefällt mir, daran werd ich mal basteln!!
Danke trotzdem für deine Hilfe!!!
Brueggendiek - Mi 27.08.03 21:46
Hallo!
Der Vorschlag, über den belegten Platz und die Dateigröße eine Fortschrittsanzeige laufen zu lassen, ist echt was für'n Popo, denn:
1. ermittelt die belegte Größe nach Clustern, die Dateigröße aber den echten (in der Regel kleineren) Wert. Kann man noch ausgleichen, indem man auf Clustergröße aufrundet,
2. belegen auch die Ordner Speicherplatz. Mir ist zur Zeit kein Weg bekannt, den von einem Ordner belegten Platz rauszubekommen - wen interessiert das denn überhaupt bei den heutigen Plattengrößen?
Fazit: Der Ansatz klingt erst mal gut, aber die Anzeige käme nie am Ende (100%) an!
Gruß
Dietmar Brüggendiek
Akut-Programming - Do 28.08.03 08:03
Öhm.... :oops: ich seh schon! Da werd ich mir wohl was anderes überlegen müssen. Na ma kucken...! :eyecrazy:
Gausi - Do 28.08.03 17:22
Das meine Idee nicht ganz 100%ig funktioniert, ist mir auch klar. Aber es ist ein Ansatz, der gegenüber dem Dateien-Zählen machbar ist.
Und wenn die eben nicht ganz bei 100% ankommt: meine Güte, dann ist das Suchen eben schneller beendet worden, die Anzeige wird meinetwegen noch schnell auf 100 hochgesetzt, und der User ist happy, dass alles ein bissel schneller fertig geworden ist. :D
Und alle Anzeigen können auch nicht immer 100%ig stimmen. Schonmal große Datenmengen von Platte zu Platte kopiert und dabei die Windows-Anzeige "verbleibende Restdauer" beobachtet? Das sind auch alles nur Schätzwerte, die sich stark verändern, jenachdem, ob in den zu kopierenden Daten grad ein 700MB großes CDImage oder 100 Einzel-Icons dran sind!
Zusatz: Bezugnehmend auf den Patente-Thread in Off-Topic weise ich noch darauf hin, dass die Fortschrittsanzeige patentrechtlich geschützt ist. Pass also auf, dass du mit deinem Programm keinen Ärger mit IBM bekommst ;-)
Akut-Programming - Fr 29.08.03 07:53
Hmm hast eigentlich recht! Ich werds einfach mal einbauen.
Gausi hat folgendes geschrieben: |
...Das meine Idee nicht ganz 100%ig funktioniert, ist mir auch klar....
|
Das wollt ich damit auch nich sagen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!