Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Datei schließen (https://www.delphipraxis.net/151517-problem-mit-datei-schliessen.html)

-Phantom- 20. Mai 2010 20:18


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:
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;
und so mache ich das mit Abbrechen
Delphi-Quellcode:
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');
Das Problem ist: Das die Datei nicht geschlossen wird, es kommt die Meldung das die Datei noch ausgeführt ist.

Aber ist mit "responseStream.free;" die Datei nicht geschlossen?

mkinzler 20. Mai 2010 20:21

Re: Problem mit Datei schließen
 
Nein, es wird nur die Klasse freigegeben
Btw: Besser
Delphi-Quellcode:
if not abbrechen then

-Phantom- 20. Mai 2010 20:23

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:

mkinzler 20. Mai 2010 20:35

Re: Problem mit Datei schließen
 
Hab noch einmal nachgesehen. Das Freigeben des Streams sollte die Datei schliessen.

H4ndy 20. Mai 2010 20:36

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;

-Phantom- 20. Mai 2010 20:40

Re: Problem mit Datei schließen
 
Vielen Danke ich werde es ausprobieren

/ kann nicht gehen weil
Delphi-Quellcode:
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;
Ja den download auslöst und das Abbrechen kommt ja erst danach?!
Dann müsste man ja vorher abbrechen drücken :D bevor man den Download startet

// oder liege ich falsch?

-Phantom- 20. Mai 2010 21:54

Re: Problem mit Datei schließen
 
Wie kann es den sein das mit
Delphi-Quellcode:
responseStream.free;
die Datei nicht geschlossen wird?

Soll ich mehr Code hier reinstellen?

DeddyH 21. Mai 2010 08:05

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:
Dings := TDings.Create;
try
  Dings.MachWas();
finally
  Dings.Free;
end;
Ansonsten wird das Free nie ausgeführt, wenn zwischen Erzeugen und Freigeben eine Exception eintritt.

-Phantom- 21. Mai 2010 12:46

Re: Problem mit Datei schließen
 
habs nun so gemacht :
Delphi-Quellcode:
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;
Es kommt aber immer noch die Meldung... langsam verzweifle ich :wall: :wall: :wall: :wall: :wall:

Andreas L. 21. Mai 2010 13:59

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:

Ja den download auslöst und das Abbrechen kommt ja erst danach?!
Dann müsste man ja vorher abbrechen drücken Very Happy bevor man den Download startet
Du musst im OnWork von TIdHTTP sowie nach dem .Get Application.ProcessMessages aufrufen damit 1. die GUI nicht einfriert und 2. der User auf den Abbrechen-Button klicken kann bevor deine Löschen-Abfrage kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz