![]() |
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 ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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