AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Datei schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Datei schließen

Ein Thema von -Phantom- · begonnen am 20. Mai 2010 · letzter Beitrag vom 22. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Datei schließen

  Alt 20. Mai 2010, 21:18
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?
Mathias Jansen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 21:21
Nein, es wird nur die Klasse freigegeben
Btw: Besser if not abbrechen then
Markus Kinzler
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 21:23
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 -.-
Mathias Jansen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 21:35
Hab noch einmal nachgesehen. Das Freigeben des Streams sollte die Datei schliessen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#5

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 21:36
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;
Manuel
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 21:40
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 bevor man den Download startet

// oder liege ich falsch?
Mathias Jansen
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit Datei schließen

  Alt 20. Mai 2010, 22:54
Wie kann es den sein das mit
responseStream.free; die Datei nicht geschlossen wird?

Soll ich mehr Code hier reinstellen?
Mathias Jansen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Problem mit Datei schließen

  Alt 21. Mai 2010, 09:05
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit Datei schließen

  Alt 21. Mai 2010, 13:46
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
Mathias Jansen
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#10

Re: Problem mit Datei schließen

  Alt 21. Mai 2010, 14:59
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.
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