Autor |
Beitrag |
Akut-Programming
      
Beiträge: 69
WinXP, Win2000
Delphi 7 Enterprise, Delphi 5 Prof.
|
Verfasst: Di 26.08.03 21:00
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.
_________________ Gruß,
Akut - Programming
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 26.08.03 21:24
FINDFIRST, FINDNEXT. Und bitte mal einen Blick in die FAQ werfen.
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: 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):
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
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
Akut-Programming 
      
Beiträge: 69
WinXP, Win2000
Delphi 7 Enterprise, Delphi 5 Prof.
|
Verfasst: 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? 
_________________ Gruß,
Akut - Programming
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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...
_________________ We are, we were and will not be.
|
|
Akut-Programming 
      
Beiträge: 69
WinXP, Win2000
Delphi 7 Enterprise, Delphi 5 Prof.
|
Verfasst: 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.
 Ich kann dann nachner Datei suchen und in ner Woche bekomm ich das Ergebnis
Aber die Idee mit dem der DiskSize gefällt mir, daran werd ich mal basteln!!
Danke trotzdem für deine Hilfe!!!
_________________ Gruß,
Akut - Programming
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: 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 
      
Beiträge: 69
WinXP, Win2000
Delphi 7 Enterprise, Delphi 5 Prof.
|
Verfasst: Do 28.08.03 08:03
Öhm....  ich seh schon! Da werd ich mir wohl was anderes überlegen müssen. Na ma kucken...! 
_________________ Gruß,
Akut - Programming
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
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 
_________________ We are, we were and will not be.
|
|
Akut-Programming 
      
Beiträge: 69
WinXP, Win2000
Delphi 7 Enterprise, Delphi 5 Prof.
|
Verfasst: 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
_________________ Gruß,
Akut - Programming
|
|