![]() |
Datei - Such - Frage
Also ich habe hier einen code Teil im Forum gefunden, und diesen ein wenig abgewandelt, herauskommen tut dabei dies:
Delphi-Quellcode:
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.
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; 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 |
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:
Grüße vom marabu
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; |
Re: Datei - Such - Frage
Um mp3 Dateien zu finden kann der Code von Marabu folgendermaßen erweitert werden:
Delphi-Quellcode:
CompareText unterscheidet keine Klein-/Großschreibung. Es wird sowohl '.MP3' als auch '.mp3' gefunden.
// Anstatt: s.Add(folder + sr.Name);
if CompareText(ExtractFileExt(SR.Name),'.mp3')=0 then s.Add(folder + sr.Name); |
Re: Datei - Such - Frage
Zitat:
hab da wohl eine Zeile zu viel weggelöscht gehabt *gg* |
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:
Freundliche Grüße vom marabu
begin
AllFiles('c:\media', '*.mp3', ListBox.Items); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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