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...