Hai drschubi,
zwei Dinge sind mir an deinem Code noch aufgefallen.
Zum einen: Was passiert wenn der Opendialg abgrebrochen wird? Es wird
stream.free aufgerufen obwohl es keine Instanz von TFileStream gibt. Ausserdem erzeugst Du für jeden Durchlauf der For-Do-Schleife eine neue Instanz von TFileStream gibst aber nur die zuletzt erzeugte wieder frei. Du hast also massig Speicherleaks erzeugt.
Delphi-Quellcode:
procedure TMainForm.fill_playlist;
var stream: TFilestream;
l: TListItem;
begin
if opendialog.Execute then
begin
for i := 0 to Pred(opendialog.Files.Count) do
begin
with ListView1 do
begin
l := Items.Add;
stream := TFileStream.Create(opendialog.files.strings[i], fmOpenRead or fmShareDenyWrite);
try
if not Id3v2Tag.exists then
stream.Seek(0, sobeginning)
else
stream.Seek(Id3v2Tag.size, soFromBeginning);
MpegInfo.LoadFromStream(Stream);
Id3v1Tag.ReadFromStream(stream);
finally
stream.Free;
end;
l.Caption := Id3v1Tag.Artist;
l.Subitems.Add(Id3v1Tag.Title);
l.Subitems.Add(Id3v1Tag.Album);
l.Subitems.Add(Id3v1Tag.year);
l.Subitems.AddStrings(opendialog.Files);
end;
end;
end;
end;
Stephan B.