Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei - Such - Frage (https://www.delphipraxis.net/55403-datei-such-frage.html)

kurtm1 20. Okt 2005 12:58


Datei - Such - Frage
 
Also ich habe hier einen code Teil im Forum gefunden, und diesen ein wenig abgewandelt, herauskommen tut dabei dies:

Delphi-Quellcode:
procedure FindAllFolders(RootFolder: string; Mask: string = '*.*');
var
  SR: TSearchRec;
  SF:TSearchRec;
  dir:String;
begin
  if AnsiLastChar(RootFolder)^ <> '\' then
    RootFolder := RootFolder + '\';
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            if (SR.Name <> '.') and (SR.Name <> '..') then
            begin
              dir:=RootFolder+sr.Name;
              if (FindFirst(dir+'\*.mp3',faanyfile,SF)=0) then
                begin
                MediaLibrary.Add(dir+'\'+SF.Name);
                while FindNext(SF)=0 do
                MediaLibrary.Add(dir+'\'+SF.Name);
                end;
            end;
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
        FindClose(sF);
        Form1.ListBox1.Items:=MediaLibrary;
      end;
end;
Funktioniert eigentlich eh alles, nur ein komisches Verhalten ist mir aufgefallen: Die funktion soll einen Ordner rekursive durchsuchen, daher alle Unterordner finden, und auch von diesen MP3 Files zurückgeben.
Das Problem ist jedoch, dass ich nicht von allen "root" Ordnern, die Dateien zurückbekomme, es scheint so, als ob dieser Code nur "eine Ebene" unter dem Root Ordner sucht.
Wie kann ich das ändern?

thx

//EDIT: PS: Die Variable "MediaLibrary" ist eine StringList, die sollte aber eh keine Bedeutung haben

marabu 20. Okt 2005 13:52

Re: Datei - Such - Frage
 
Hi.

Du hast ja gar keine Rekursion in deinem Code - ohne bleibt er dann hängen. Ich habe deinen Code nochmal etwas abgeändert:

Delphi-Quellcode:
procedure AllFiles(folder: string; mask: string = '*.*'; s: TStrings);
var
  sr: TSearchRec;
begin
  folder := IncludeTrailingPathDelimiter(folder);
  if FindFirst(folder + mask, faAnyFile, sr) = 0 then
  try
    repeat
      if (sr.Name = '.') or (sr.Name = '..') then
        Continue
      else
      if (sr.Attr and faDirectory) = faDirectory
        then AllFiles(folder + sr.Name, mask, s)
        else s.Add(folder + sr.Name);
    until FindNext(sr) <> 0;
  finally
    FindClose(sr);
  end;
end;
Grüße vom marabu

Achtzig 20. Okt 2005 14:03

Re: Datei - Such - Frage
 
Um mp3 Dateien zu finden kann der Code von Marabu folgendermaßen erweitert werden:

Delphi-Quellcode:
// Anstatt: s.Add(folder + sr.Name);
if CompareText(ExtractFileExt(SR.Name),'.mp3')=0 then s.Add(folder + sr.Name);
CompareText unterscheidet keine Klein-/Großschreibung. Es wird sowohl '.MP3' als auch '.mp3' gefunden.

kurtm1 20. Okt 2005 14:13

Re: Datei - Such - Frage
 
Zitat:

Zitat von marabu
Hi.

Du hast ja gar keine Rekursion in deinem Code - ohne bleibt er dann hängen.

stimmt thx
hab da wohl eine Zeile zu viel weggelöscht gehabt *gg*

marabu 20. Okt 2005 16:18

Re: Datei - Such - Frage
 
@Achtzig: die Prozedur AllFiles() ist so entworfen, dass der folgende Aufruf alle MP3-Dateien im Teilbaum c:\media des Dateisystems einsammelt:

Delphi-Quellcode:
begin
  AllFiles('c:\media', '*.mp3', ListBox.Items);
end;
Freundliche Grüße vom marabu


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