Probleme mit GetFilesInDirectory Procedure
Hi,
ich habe mir folgenden Code aus dem Delphi Forum kopiert:
Delphi-Quellcode:
Allerdings habe ich jetzt das Problem, dass er z.B. einfach C:\Programme auslässt wenn ich als Ordner C:\ angebe. Aber auch eine Menge anderer Ordner wie Temp Ordner werden einfach ausgelassen... kann mir jemand sagen was hier schief läuft?
procedure GetFilesInDirectory(Directory: String; const Mask: String;
List: TStrings; WithSubDirs, ClearList: Boolean); procedure ScanDir(const Directory: String); var SR: TSearchRec; begin if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try repeat List.Add(Directory + SR.Name) until FindNext(SR) <> 0; finally FindClose(SR); end; if WithSubDirs then begin if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try repeat if (SR.Attr = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then ScanDir(Directory + SR.Name + '\'); until FindNext(SR) <> 0; finally FindClose(SR); end; end; end; begin List.BeginUpdate; try if ClearList then List.Clear; if Directory = '' then Exit; if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; ScanDir(Directory); finally List.EndUpdate; end; end; procedure TForm1.Button1Click(Sender: TObject); begin GetFilesInDirectory('C:\', '*.*', Listbox1.Items, False, True); end; procedure TForm1.Button1Click(Sender: Tobject); var F: TSearchRec; begin if FindFirst(ed_dateiname.text, faAnyFile, F) = 0 then try Label1.Caption := F.Name Label2.Caption := IntToStr(F.Size); finally FindClose(F); end; end; Gruß Dash |
Re: Probleme mit GetFilesInDirectory Procedure
Ich glaube Dein False musst Du in True umbenennen, also so:
Delphi-Quellcode:
Grüße Go2EITS
GetFilesInDirectory('C:\', '*.*', Listbox1.Items, True, True);
|
Re: Probleme mit GetFilesInDirectory Procedure
Moin Dash,
diese Zeile
Delphi-Quellcode:
muss so
if (SR.Attr = faDirectory) and
Delphi-Quellcode:
aussehen.
if ((SR.Attr and faDirectory) <> 0) and
Auch ein Directory kann mehr als ein Attribut haben, und wenn das der Fall ist, klappt der Vergleich mit = nicht mehr, um ein Verzeichnis zu erkennen. [EDIT] Ausserdem sollte man Bitmasken, niemals mit + und - bearbeiten
Delphi-Quellcode:
auch wenn das in diesem Falle sogar funktionieren würde, sollte es besser
if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
Delphi-Quellcode:
heissen. Hier hat übrigens das Beispiel zu FindFirst in der Delphi-Hilfe auch einen Fehler, da hier die Attribute mit + verknüpft werden (richtig wäre OR).
if FindFirst(Directory + Mask, faAnyFile AND NOT faDirectory, SR) = 0 then try
Hier hatte ich das schon einmal ausführlich erklärt. Da FindFirst sich so gut wie nicht um den übergebenen Attributwert kümmert, wäre es sicherer es so zu schreiben:
Delphi-Quellcode:
[/EDIT]
if FindFirst(Directory + Mask, faAnyFile, SR) = 0 then try
repeat if (sr.Attr and faDirectory) = 0 then List.Add(Directory + SR.Name) until FindNext(SR) <> 0; |
Re: Probleme mit GetFilesInDirectory Procedure
Zitat:
@Christian Ich habe nun deinen letzten Code benutzt, allerdings hört er nach der ersten Datei auf zu scannen :? Gruß Dash |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz