![]() |
FindFirst usw unterschlagen Verzeichnisse
Ich will ein Prog schreiben das mir alle Verzeichnisse mitsamt Unterverzeichnissen auflistet. Dafür habe ich erst mal getestet, sprich ein Programm geschrieben, das die Verzeichnisse erst mal ohne Unterverzeichnisse auflistet... doch mein Testprog unterschlägt Verzeichnisse! Ich rätsel da schon rum wie ein Blöder!
Habe ein Editfeld mit Namen root (Verzeichnis in welchem gesucht wird) und ein Memofeld namens listenmemo...
Delphi-Quellcode:
Vielen Dank schon mal für die Hilfe!
procedure TForm1.ButtonClick(Sender: TObject);
var verzeichnisse: TSearchRec; begin if findfirst(root.Text + '*', fadirectory, verzeichnisse) = 0 then begin listenmemo.Lines.add(verzeichnisse.name); repeat findnext(verzeichnisse); if verzeichnisse.Attr = 16 then listenmemo.Lines.add(verzeichnisse.name); until findnext(verzeichnisse) <> 0; end; findclose(verzeichnisse); end; Ich beiss mir bald noch ins Knie wegen so was *gg* |
Re: FindFirst usw unterschlagen Verzeichnisse
Hi,
Du rufst findnext einmal zu viel auf. So ist die Schleife richtig:
Code:
Gruss Ulrich
repeat
findnext(verzeichnisse); if verzeichnisse.Attr = 16 then listenmemo.Lines.add(verzeichnisse.name); until findnext(verzeichnisse) <> 0; |
Re: FindFirst usw unterschlagen Verzeichnisse
Es sollte auch das aktuelle und übergeordnete Verzeichnis übergangen werden:
Delphi-Quellcode:
if FindFirst(verz + '*.*',fadirectory, Search)= 0 then begin
repeat if((search.attr and fadirectory)=fadirectory) and (search.name<>'.') and (search.name<>'..') then begin // Rekursion GetFolderCount(verz+ Search.Name + '\' + such); end; until FindNext(Search) <> 0; |
Re: FindFirst usw unterschlagen Verzeichnisse
Hmm abgesehen davon, dass ich einmal
Delphi-Quellcode:
vergessen habe (vor dem ersten hinzufügen zum memo), sehe ich da keinen Unterschied zu deiner Variante, ustra. s14, dein Ratschlag ist natürlich sinnvoll, hat mich eben allerdings nicht interessiert *gg*.
if suche.Attr = 16 then
|
Re: FindFirst usw unterschlagen Verzeichnisse
Code:
procedure TForm1.ButtonClick(Sender: TObject);
var verzeichnisse: TSearchRec; begin if findfirst(root.Text + '*', fadirectory, verzeichnisse) = 0 then begin listenmemo.Lines.add(verzeichnisse.name); repeat [color=red]findnext(verzeichnisse);[/color] if [color=red]verzeichnisse.Attr = 16[/color] then listenmemo.Lines.add(verzeichnisse.name); until findnext(verzeichnisse) <> 0; end; findclose(verzeichnisse); end;
Delphi-Quellcode:
Procedure TForm1.ButtonClick(Sender: TObject);
Var verzeichnisse: TSearchRec; Begin If FindFirst(root.Text + '*', fadirectory, Verzeichnisse) = 0 Then Begin Repeat If ((verzeichnisse.Attr and faDirectory) <> 0) and (verzeichnisse.Name <> '.') and (verzeichnisse.Name <> '..') Then listenmemo.Lines.Add(verzeichnisse.name); Until FindNext(verzeichnisse) <> 0; FindClose(verzeichnisse); End; |
Re: FindFirst usw unterschlagen Verzeichnisse
Ausserdem kommt es vor, das
Delphi-Quellcode:
Verzeichnisse nicht findet. Da das Attribut faDirectory z.B. in himitsus Code eh später überprüft wird, sollte man mit
If FindFirst(root.Text + '*', faDirectory, Verzeichnisse) = 0 Then Begin
Delphi-Quellcode:
arbeiten.
If FindFirst(root.Text + '*.*', faAnyFile, Verzeichnisse) = 0 Then Begin
PS: Das *.* habe ich eingefügt, da es auch Ordner mit Punkt drin gibt. |
Re: FindFirst usw unterschlagen Verzeichnisse
Arg bin ich doof jetzt beisse ich mir erst recht ins Knie *nag*
Vielen Dank himitsu und ihr anderen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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