![]() |
Problem mit Datei schließen
Hey Leute,
Ich habe vor eine Datei mit der indy Komponente runterzuladen. Dabei hat man aber die Möglichkeit den Download abzubrechen. Das hatte ich so zu machen: Ich erstelle eine globale Var. und wenn man auf "Abbrechen klickt" wird die var. auf true gesetzt. So egal ob man auf Abbrechen klickt oder nicht die Datei soll erst mal ganz runtergeladen werden. Wenn nun die var. auf True ist soll die Datei am ende gelöscht werden. So lade ich herunter:
Delphi-Quellcode:
und so mache ich das mit Abbrechen
var
ini : Tinifile; begin button2.Enabled := false; createdir(edit1.Text); speicherpfad := edit1.Text; ini := Tinifile.Create(speicherpfad+'Einstellungen.ini'); responseStream := TFileStream.Create(speicherpfad+'Phantom_Zip_v2.exe', fmCreate); IdHTTP1.Get('http://phantomzip.ph.funpic.de/Phantom_Zip_v2.exe', responseStream); responseStream.free;
Delphi-Quellcode:
Das Problem ist: Das die Datei nicht geschlossen wird, es kommt die Meldung das die Datei noch ausgeführt ist.
procedure TForm3.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin if abbrechen = false then begin sgauge1.Progress := 100; form4.show; form3.Hide; end; if abbrechen then begin sgauge1.Progress := 100; deletefile(speicherpfad+'Phantom_Zip_v2.exe'); Aber ist mit "responseStream.free;" die Datei nicht geschlossen? |
Re: Problem mit Datei schließen
Nein, es wird nur die Klasse freigegeben
Btw: Besser
Delphi-Quellcode:
if not abbrechen then
|
Re: Problem mit Datei schließen
Oke habe ich geändert...
Aber wie schließe ich die Datei nun? Mit fileclose? geht ja schlecht weil ich dazu ein Integer brauche und "speicherpfad+'Phantom_Zip_v2.exe" ist leider ein String ^^ // und responseStream.close gibt es nicht -.- :wall: |
Re: Problem mit Datei schließen
Hab noch einmal nachgesehen. Das Freigeben des Streams sollte die Datei schliessen.
|
Re: Problem mit Datei schließen
Was bringt dir das abbrechen, wenn du eh komplett runterlaedst? Wenn du das so abarbeitest, dann brauchst du den Code auch nicht in OnWorkEnd zu packen, sondern kannst ihn direkt nach HTTP.get einbauen:
Delphi-Quellcode:
responseStream := TFileStream.Create(speicherpfad+'Phantom_Zip_v2.exe', fmCreate);
IdHTTP1.Get('http://phantomzip.ph.funpic.de/Phantom_Zip_v2.exe', responseStream); responseStream.free; // Freigeben, schliesst auch das Handle if abbrechen then begin sgauge1.Progress := 100; deletefile(speicherpfad+'Phantom_Zip_v2.exe'); // loeschen end; |
Re: Problem mit Datei schließen
Vielen Danke ich werde es ausprobieren
/ kann nicht gehen weil
Delphi-Quellcode:
Ja den download auslöst und das Abbrechen kommt ja erst danach?!
var
ini : Tinifile; begin button2.Enabled := false; createdir(edit1.Text); speicherpfad := edit1.Text; ini := Tinifile.Create(speicherpfad+'Einstellungen.ini'); responseStream := TFileStream.Create(speicherpfad+'Phantom_Zip_v2.exe', fmCreate); IdHTTP1.Get('http://phantomzip.ph.funpic.de/Phantom_Zip_v2.exe', responseStream); responseStream.free; Dann müsste man ja vorher abbrechen drücken :D bevor man den Download startet // oder liege ich falsch? |
Re: Problem mit Datei schließen
Wie kann es den sein das mit
Delphi-Quellcode:
die Datei nicht geschlossen wird?
responseStream.free;
Soll ich mehr Code hier reinstellen? |
Re: Problem mit Datei schließen
Wie wäre es denn, wenn Du mal Gebrauch von try-finally-Blöcken machen würdest?
Delphi-Quellcode:
Ansonsten wird das Free nie ausgeführt, wenn zwischen Erzeugen und Freigeben eine Exception eintritt.
Dings := TDings.Create;
try Dings.MachWas(); finally Dings.Free; end; |
Re: Problem mit Datei schließen
habs nun so gemacht :
Delphi-Quellcode:
Es kommt aber immer noch die Meldung... langsam verzweifle ich :wall: :wall: :wall: :wall: :wall:
try
responseStream := TFileStream.Create(speicherpfad+'Phantom_Zip_v2.exe', fmCreate); IdHTTP1.Get('http://phantomzip.ph.funpic.de/Phantom_Zip_v2.exe', responseStream); finally responseStream.free; // und das hab ich auch probiert responseStream := TFileStream.Create(speicherpfad+'Phantom_Zip_v2.exe', fmCreate); try IdHTTP1.Get('http://phantomzip.ph.funpic.de/Phantom_Zip_v2.exe', responseStream); finally responseStream.free; |
Re: Problem mit Datei schließen
Das WorkEnd-Ereignis wird von TIdHTTP direkt nach dem Download aufgerufen also noch bevor die Datei mir Stream.Free; geschlossen wird.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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