Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi GetAllFiles (https://www.delphipraxis.net/27470-getallfiles.html)

ueei.net 10. Aug 2004 20:14


GetAllFiles
 
Hallo,

möchte eine beliebige Anzahl von Endungen in meine rekursive Dateisuche einbauen.

Ich suche zur Zeit wie folgt.

Delphi-Quellcode:
//Rekursives Einlesen
procedure TForm1.GetAllFiles(mask: string);
var
  search: TSearchRec;
  directory: string;
  checksum: string;
begin
  directory := ExtractFilePath(mask);

  // find all files
  if FindFirst(mask, $23, search) = 0 then
  begin
    repeat
      // add the files to the listbox
      checksum := IntToStr(GetCheckSum(directory + search.Name));
      Form1.Memo_akt.Lines.Add(directory + search.Name + '|' + checksum);
      Inc(Count);
    until FindNext(search) <> 0;
  end;

  // Subdirectories/ Unterverzeichnisse
  if FindFirst(directory + '*.*', faDirectory, search) = 0 then
  begin
    repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
        GetAllFiles(directory + search.Name + '\' + ExtractFileName(mask));
    until FindNext(search) <> 0;
    FindClose(search);
  end;
end;
Nun möchte ich aber als mask mehrere Endungen angeben können (*.jpg,*.gif,*.tif) usw.

Wie kann ich das angehen?

Danke

S2B 10. Aug 2004 20:21

Re: GetAllFiles
 
Ersetze einfach das Komma durch einen Strichpunkt und es stimmt! :wink:

ueei.net 10. Aug 2004 20:26

Re: GetAllFiles
 
hallo, leider auch nicht. hatte ich auch schon mal probiert.

Christian Seehase 10. Aug 2004 21:02

Re: GetAllFiles
 
Moin ueei.net,

da gäbe es, so auf Anhieb, zwei Ansätze:
  1. Lass die Schleife für alle übergebenen Endungen laufen
  2. Lies alle Dateien, und prüfe, ob deren Endung in der Maske vorkommt.

Auch wenn es üblich ist ein ; als Trennzeichen zu verwenden, würde ich das nicht nehmen, denn dies ist ein gültiges Zeichen in einem Dateinamen.
Nimm lieber eines der Zeichen, die nicht vorkommen dürfen (*,\,/,",<,>,?,|,:).
Optisch sticht besonders | heraus.

Für den zweiten Fall könnte man dann so testen:

Delphi-Quellcode:
if pos(AnsiUpperCase(ExtractFileExt(search.Name)+'|'),AnsiUpperCase(mask)) > 0 then ...
mask müsste dann so aufgebaut sein:

Code:
.jgp|.gif|.tif|


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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