Hallo
DP!
Ich habe einen Algorithmus geschrieben um Datein in einem angegebenen Verzeichnis und Unterverzeichnissen zu Suchen. Der Code Funktioniert sehr gut, aber wenn es eine hohe Anzahl an dateien ist (>2000) dauert es sehr sehr lange (>10 min bei XP2100+, ATA133 HDD) bis alles durchsucht wurde.
Code:
procedure GetFilesInDirectoryMP3(ADirectory: string; AMask: String; ARekursiv: Boolean);
var
SR: TSearchRec;
Value, M, S : Integer;
begin
if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
ADirectory:=ADirectory+'\';
if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then
begin
repeat
if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then
//ID3Tags, speichern ... einfügen
MP3.Execute(ADirectory+SR.Name);
if MP3.ID3v2TLEN<>'' then
begin
Value := Trunc(strtoint(mp3.ID3v2TLEN) / 1000);
M := (value mod 3600) div 60;
S := (value mod 3600) mod 60;
end else begin
Value := Trunc(mp3.spielzeit);
M := (value mod 3600) div 60;
S := (value mod 3600) mod 60;
end;
mp3liste.Artist:='+ '+MP3.ID3v2TPE1;
mp3liste.Album:=MP3.ID3v2TALB;
mp3liste.Titel:=MP3.ID3v2TIT2;
mp3liste.Genre:=mp3.ID3v2TCON;
mp3liste.Zeit:=Format('%2.2d:%2.2d', [M, S]);
mp3liste.TrackNr:=MP3.ID3v2TRCK;
mp3liste.Dateiname:=SR.Name;
mp3liste.Pfad:=ADirectory;
write(f3,mp3liste);
until FindNext(SR)<>0;
FindClose(SR);
end;
// Unterverzeichnis durchsuchen
if ARekursiv then
if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
begin
repeat
if (SR.Name<>'.') and (SR.Name<>'..') then
GetFilesInDirectoryMP3(ADirectory+SR.Name,AMask,True);
until FindNext(SR)<>0;
FindClose(SR);
end;
end;
Meine Frage: Hat jemand eine Idee wie den Code schneller machen kann?