![]() |
TFileStream.Free gibt Datei nicht frei?
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:
Beide Beeps kommen an, die Prozeduren werden also durchgeführt.
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; Interessanterweise habe ich das selbe Problem bei meinem JPEG-Kompressor, habe es da aber auf die Konvertierungsorgien zurückgeführt... |
Re: TFileStream.Free gibt Datei nicht frei?
Ich habe das ganze jetzt so "gelöst":
Delphi-Quellcode:
Is aber eher ein workaround...
//....
curr.http.Get(curr.url,TMemoryStream.Create); //curr.http is TIdHTTP //.... procedure TFIndyLoader.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode); var http: TIdHTTP; dir: string; begin Beep; dir := IncludeTrailingPathDelimiter(ELocalDir.Text); ForceDirectories(dir); http := Sender as TIdHTTP; http.Response.ContentStream.Position := 0; with TFileStream.Create(dir + downloads[http.Tag].fname,fmCreate) do try CopyFrom(http.Response.ContentStream,http.Response.ContentStream.Size); finally Free; end; Postmessage(Handle,WM_FREE,Integer(@http),0); end; Was mich noch wundert: wenn ich im OnWorkEnd gleich Response.ContentStream freigegeben habe, hat er zwar ein paar AVs geworfen, aber die Datei war danach frei... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz