Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

TFileStream.Free gibt Datei nicht frei?

  Alt 8. Mai 2006, 18:00
Hallo,

ich habe einen mit TFileStream.Create('filename',fmCreate) erzeugten Filestream. Diesen bekommt ein TIdHTTP(.Get) und lädt auch was schönes runter.
Ich gebe den Stream im OnWorkEnd wieder frei, dabei wird allerdings das Dateihandle nicht freigegeben. Ich kann also auf die erzeugte Datei nicht zugreifen solange meine Anwendung läuft.
Ich hab mir dann gedacht, dass vielleicht Indy den stream "behält" und mir selber eine Message gepostet, in der dann steht, dass ich Indy freigeb. Aber das hilft auch nichts.

Der relevante Code:

Delphi-Quellcode:
procedure TFIndyLoader.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
var http: TIdHTTP;
begin
  Beep;

  http := Sender as TIdHTTP;

  FreeAndNil(downloads[http.Tag].res.fs); // fs = der filestream

  Postmessage(Handle,WM_FREE,Integer(@http),0); //WM_FREE = WM_USER + 1
end;

procedure TFIndyLoader.OnWMFREE(var Msg: TWMFree);
begin
  windows.Beep(440,500);

  if Assigned(TObject(Msg.wParam)) then
    with TObject(Msg.wParam) as TIdHTTP do
      begin
        Response.ContentStream.Free; //mal so auf gut glück...
        Free;
      end;
end;
Beide Beeps kommen an, die Prozeduren werden also durchgeführt.

Interessanterweise habe ich das selbe Problem bei meinem JPEG-Kompressor, habe es da aber auf die Konvertierungsorgien zurückgeführt...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat