![]() |
Dateianzahl ermitteln
Hallo zusammen,
ich habe folgende Frage: ich habe einen Ordner mit mehreren Unterordnern und n Dateien. Wie kann ich ermitteln, wie viele Dateien sich insgesamt in diesem Hauptordner (incl. Unterordnern) befinden? Bin für jede Hilfe dankbar!!! Danke im voraus, Marc |
Re: Dateianzahl ermitteln
hi,
z.B. so:
Delphi-Quellcode:
Das ist ein ungetesteter Ansatz. Evtl passt da irgendwas noch nicht
function FileCount(_ordner : string): integer;
var files : TSearchRec; count : integer begin count := 0; if FindFirst(ordner + '\*.*',faAnyFile or faDirectory, files) = 0 then begin repeat if (files.Attr and faDirectory) = faDirectory then begin count := count + FileCount(_ordner + '\' + files.Name); end else begin count := count + 1; end; until FindNext(files) <> 0; FindClose(files); end; result := count; end; grüße, daniel |
Re: Dateianzahl ermitteln
Danke für die prompte AW!
|
Re: Dateianzahl ermitteln
Einen kleinen Teil soltest du aber noch ändern:
Code:
in
[s]end else begin
count := count + 1; end;[/s]
Code:
Sonst stimmt die Anzahl der Dateien nicht.
[s]end else begin
if (files.Name <> '.') and (files.Name = '..') then count := count + 1; end;[/s] Der Rest dürfte so funktionieren. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Dateianzahl ermitteln
Moin Himitsu,
müsste auch so gehen, da . und .. Verzeichnisse sind. |
Re: Dateianzahl ermitteln
:oops: Ups, das kommt davon, wenn man den Namen vor der Unterscheidung auf Datei/Verzeichnis prüft.
Hab nochmal nachgeguckt - Christian hat also Recht. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Dateianzahl ermitteln
Hallo!
@himitsu: Im Prinzip hattest Du doch Recht mit "." und ".." - nur hast Du das an der falschen Stelle geprüft! Der Code von Sanchez zählt nämlich auch die Directories "." und ".." mit - eindeutig ein schwerer Fehler! Deine Abprüfung muß also beim Directory-Zweig stehen. Mit einer Hilfsvariablen wird es übrigens noch einfacher (verkürzt auf den sinngebenden inhalt):
Delphi-Quellcode:
Gruß
var code:integer;
code := FindFirst(...) while code = 0 do begin ... tu was mit gefundenem code := findnext(...); end; Dietmar Brüggendiek |
Re: Dateianzahl ermitteln
OK, dann also so:
Delphi-Quellcode:
Ich hab den Code gleich mal etwas optimiert:
Function FileCount(Ordner: String): Integer;
Var Files: TSearchRec; Count: Integer; Begin If (Ordner > '') and (Ordner[Length(Ordner)] <> '\') Then Ordner := Ordner + '\'; Count := 0; If FindFirst(Ordner + '*.*', faAnyFile, Files) = 0 Then Begin Repeat If (Files.Attr and faDirectory) <> faDirectory Then Inc(Count) Else If (Files.Name <> '.') and (Files.Name <> '..') Then Inc(Count, FileCount(Ordner + Files.Name + '\'); Until FindNext(Files) <> 0; FindClose(Files); End; Result := Count; End;
Delphi-Quellcode:
In faAnyFile ist faDirectory schon drin :wink: (siehe OH)
Count := Count + 1;
{=} Inc(Count); http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Dateianzahl ermitteln
Zitat:
Aber Borland weiß das auch: Zitat:
|
Re: Dateianzahl ermitteln
@Mathias:
wenn das doch geht, dann tut es mir sehr leid. Es ist nur so, das es früher bei mir zu Fehlermeldungen geführt hat. (Delphi 4 Standard) Gut, dann geht es auch noch mal nach dir:
Delphi-Quellcode:
Jetzt ist zwar im gegensatz zur vorherigen Version ein Integer mehr da, aber dafür ein IF weniger.
Function FileCount(Ordner: String): Integer;
Var Files: TSearchRec; Count, Code: Integer; Begin If (Ordner > '') and (Ordner[Length(Ordner)] <> '\') Then Ordner := Ordner + '\'; Count := 0; Code := FindFirst(Ordner + '*.*', faAnyFile, Files) = 0 Then Begin While Code = 0 do Begin If (Files.Attr and faDirectory) <> faDirectory Then Inc(Count) Else If (Files.Name <> '.') and (Files.Name <> '..') Then Inc(Count, FileCount(Ordner + Files.Name + '\'); Code := FindNext(Files); End; FindClose(Files); Result := Count; End; Hab mir auch noch mal dir OH angeguckt - die vorherige Variante ist mehr nach der OH. Muß jetzt halt jeder selber entscheiden, was ihm/ihr besser gefällt. [OT] nochmal @ Mathias: es haben sich mittlerweile ja auch noch andere Probleme von selbst behoben. z.B. gab es Fehlermeldungen, wenn ich ein leeres Array mit SetLength(irgend ein Array, 0); nochmal auf Length = 0 setzte. Der folgende Code ist jetzt auch schon bei mir überflüßig geworden: If Length(Array) <> 0 Then SetLength(Array, 0); [/OT] http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Dateianzahl ermitteln
Hallo? Das war keine Kritik. Wenn es bei Delphi 4 nicht funktioniert hat, dann wird Borland da evtl. genau diesen Teil mit der Prüfung vergessen haben. Hätte ja auch sein können, dass du einen ganz anderen Fehler entdeckt hast.
Also, nichts für ungut. Was mir aber wirklich gefällt, ist der Satz: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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-2025 by Thomas Breitkreuz