hallo, wer kann mir helfen ? Ich möchte die Search-Schleife unterbrechen können,wenn die Suche mal zu lange dauert (lol ganze Festplatte ausgewählt etc.) ...
habe versucht das über ein Flag zu lösen, aber bei mir scheitert es an der richtigen Stelle.
Die Procedure ist eh etwas zu langsam, da er ja 2x durch die gleichen Ordner geht...und noch nicht mal verschiedene Dateimasken gleichzeitig kann.
Delphi-Quellcode:
procedure Tmediaarchiv_frm.FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec;
begin
RootFolder := IncludeTrailingPathDelimiter(RootFolder);
if Recurse then
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory = faDirectory then
// --> ein Verzeichnis wurde gefunden
// der Verzeichnisname steht in SR.Name
// der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
// RootFolder + SR.Name
if (SR.Name <> '.') and (SR.Name <> '..') then
FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
application.ProcessMessages;
mediaplayer_frm.search_scroll_txt.Enabled := true; //Aktivierung
mediaplayer_frm.search_scroll_txt.visible := true;
mediaplayer_frm.stop_search_btn.Visible := true;
until FindNext(SR) <> 0;
finally
FindClose(SR);
mediaarchiv_frm.search_files_end_timer.Enabled := true;
mediaarchiv_frm.search_files_end_timer.Interval := 1500;
end;
if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory <> faDirectory then
begin
// --> eine Datei wurde gefunden
// der Dateiname steht in SR.Name
// der vollständige Dateiname (inkl. Pfadangabe) ist
// RootFolder + SR.Name
// folgende Zeile schreibt den vollständigen Namen in eine Listbox
PlayList.Add(RootFolder + SR.Name);
mediaplayer_frm.PlayList_ListBox.Items.add(SR.Name);
mediaarchiv_frm.search_files_end_timer.Enabled:= false;//Verzögerung
mediaplayer_frm.search_scroll_txt.Enabled := true; //Aktivierung
mediaplayer_frm.search_scroll_txt.visible := true;
mediaplayer_frm.stop_search_btn.Visible := true;
end;
until FindNext(SR) <> 0 ;//or Flag_File_search_stop;
finally
FindClose(SR);
mediaarchiv_frm.search_files_end_timer.Enabled := true;
mediaarchiv_frm.search_files_end_timer.Interval := 1500;
end;
end;