Thema: Delphi Code Optimierung

Einzelnen Beitrag anzeigen

TheReaper

Registriert seit: 27. Feb 2003
Ort: chemnitz
90 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Code Optimierung

  Alt 22. Okt 2004, 21:36
Ich hab mittlerweile rausgefunden warum das so lange dauerte. Beim Auslesen eines Tags von einer bestimmten Datei war eine Schleife die fast Endlos war. Warum? Keine Ahnung . Mit anderen Playern ging das ohne Probs und mit nem Program zum ID3Tags auslesen gabs auch keine Probs. Ich hab den Code etwas optimiert und für alle die es interessiert Hier isser:

Code:
...

var Pfad array of string;

...

procedure GetFilesInDirectoryMP3(ADirectory: string; AMask: String; ARekursiv: Boolean);
var
SR: TSearchRec;
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 and faDirectory) = 0) then

  Setlength(Pfad,length(Pfad)+1);
  Pfad[high(Pfad)]:=ADirectory+SR.Name;

until FindNext(SR)<>0;
FindClose(SR);
end;
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;

procedure Tfrm2wnl.BitBtn1Click(Sender: TObject);
var
i:integer;
Value, M, S : Integer;
begin
seek(f3,filesize(f3));
getfilesindirectoryMP3(directorylistbox1.Directory,'*.mp3' ,true);
if high(pfad)>=1 then
frm2wnl.progressbar1.Max:=high(pfad);

for i:=0 to high(pfad) do
begin
if Uppercase(ExtractFileExt(pfad[i]))<>'.MP3' then Continue;

  MP3.Execute(pfad[i]);
  if MP3.ID3v2TLEN<>'' then
     Value := Trunc(strtoint(mp3.ID3v2TLEN) / 1000)
  else
     Value := Trunc(mp3.spielzeit);

  M := (value mod 3600) div 60;
  S := (value mod 3600) mod 60;

  if MP3.ID3v2TPE1<> '' then mp3liste.Artist:='+ '+MP3.ID3v2TPE1   //Das mit dem '+' passt schon. Einfach ignorieren.
  else mp3liste.Artist := '+ Unbekannt';
  if MP3.ID3v2TALB<> '' then mp3liste.Album:=MP3.ID3v2TALB
  else mp3liste.Album := 'Unbekannt';
  if MP3.ID3v2TIT2<> '' then mp3liste.Titel:=MP3.ID3v2TIT2
  else mp3liste.Titel := 'Unbekannt';
  if mp3.ID3v2TCON<> '' then mp3liste.Genre:=mp3.ID3v2TCON
  else mp3liste.Genre := 'Unbekannt';

  mp3liste.Zeit:=Format('%2.2d:%2.2d', [M, S]);

  if MP3.ID3v2TRCK<> '' then mp3liste.TrackNr:=MP3.ID3v2TRCK
  else mp3liste.TrackNr := '00';

  if fileexists (pfad[i]) then
  begin
  mp3liste.Dateiname:=ExtractFileName(Pfad[i]);
  mp3liste.Pfad:=ExtractFilePath(Pfad[i]);
  end;

  write(f3,mp3liste);
  frm2wnl.progressbar1.position:=i;
end;

...

end;
Wenn einer ne Idee hat diesen Code noch besser zu machen dann soll er es bitte nicht für sich behalten.
  Mit Zitat antworten Zitat