Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Problem mit Opendialog und for-Schleife

  Alt 17. Jun 2006, 05:45
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.
  Mit Zitat antworten Zitat