Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Rekursive Dateiensuche (mehrere Ordnerebenen) (https://www.delphipraxis.net/124611-rekursive-dateiensuche-mehrere-ordnerebenen.html)

qb-tim 21. Nov 2008 21:16


Rekursive Dateiensuche (mehrere Ordnerebenen)
 
Hi,

ich versuche gerade eine rekursive Funktion für ein Dateiensuche durch alle Unterordner des Startordners hinzukriegen. Nun habe ich folgende Unit geschrieben:

Delphi-Quellcode:
unit UDeepSearch;

interface

uses
  Classes, QDialogs, QForms, SysUtils;

procedure DeepSearch;
function ScanFor(ADir, AMask: String): TStringList;

const RootDir = 'C:\Program Files\Borland\Delphi6\Projects\DeepSearch\Test\';

implementation

procedure DeepSearch;
var SLFiles: TStringList;
begin
  SLFiles := TStringList.Create;
  SLFiles.Clear;
  SLFiles.AddStrings(ScanFor(RootDir, '.jpg'));
  ShowMessage(IntToStr(SLFiles.Count));
  SLFiles.Free;
end;

function ScanFor(ADir, AMask: String): TStringList;
var SR: TSearchRec;
begin
  Result.Clear;
  if FindFirst(ADir + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
        Result.AddStrings(ScanFor(ADir + SR.Name + '\', AMask))
      else if Pos(AMask, SR.Name) > 0 then
        Result.Add(ADir + SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

end.
Die Prozedur "DeepSearch" ist nur zum testen geschrieben worden. Ich habe meine Photoalben (alles jpg) in RootDir kopiert. Aber die Zahl, die als Ergebnis (SLFiles.Count) ausgegeben wird, ist VIEL zu klein. Warum funktioniert die Rekursion nicht? Was muss ich ggf. korrigieren?

jfheins 21. Nov 2008 21:20

Re: Rekursive Dateiensuche (mehrere Ordnerebenen)
 
Wo erstellst du die Stringliste, die scanfor zurückgibt?

Könntest du nicht die Stringliste als Parameter übergeben? Das würde solche Probleme vermeiden ;)

qb-tim 21. Nov 2008 21:28

Re: Rekursive Dateiensuche (mehrere Ordnerebenen)
 
Muss ich die StringList erstellen? Es kommen ja richtige Ergebnisse aus der Rekursion heraus - nur nicht aus allen Ordnern. Ich vermute, dass es irgendwie was mit dem SearchRec zu tun hat.

qb-tim 21. Nov 2008 22:51

Re: Rekursive Dateiensuche (mehrere Ordnerebenen)
 
Delphi-Quellcode:
function ScanFor(ADir, AMask: String): TStringList;
var SR: TSearchRec;
begin
  Result := TStringList.Create;
  Result.Clear;
  if FindFirst(ADir + '*.*', faAnyFile, SR) = 0 then
//...
Jetzt funktioniert es. :cheers: Danke für den Hinweis, jfheins :cheers:


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