![]() |
try except Frage
Hallo alle miteinander...
ich seh den Wald vor Bäumen nicht... :(
Delphi-Quellcode:
soll wie folgt funktionieren:
UDateiListe.Add(Ziel);
try fStream:= TFileStream.Create(Ziel,fmCreate or fmShareDenyNone); try idHTTP1.Get(Quelle, fStream); finally fStream.Free; end; except MessageDlg('Update fehlgeschlagen...(Datei herunterladen)',mtError,[mbOK],0); for A := 0 to UDateiListe.Count - 1 do begin try DeleteFile(UDateiliste.Strings[A]); except end; end; Application.Terminate; end; - der Quellcode ist ein Teil einer Procedure welche für jede Datei welche downgeloaded werden soll ausgeführt wird. - tritt irgend ein Fehler auf soll die Meldung angezeigt, dann die vorher downgeloadeten Dateien (UDateiListe) gelöscht und das Update beendet werden. - funktioniert auch prächtig, wenn alle Quelldateien vorhanden sind. beim Fehlertest (Quelldatei existiert nicht) passiert folgendes: - Meldung erscheint (ist ja ok) - Dateien werden gelöscht. (auch ok) - die Application (update.exe) wird nicht beendet sondern fährt mit der nächsten Datei fort. :wiejetzt: PS: die update.exe ist auch in der UDateiListe vorhanden und ist nicht löschbar, da (noch) gestartet. Das sollte aber über den try except Block beim Löschen abgefangen werden. Habe ich die Grundlagen falsch verstanden ? :gruebel: Könnte mir jemand den Knoten lösen ? Danke.... |
Re: try except Frage
generell was zu den speicherschutzbloeken. ich halte es fuer einen schlechten stil sie fuer alles zu verwenden. da z.b. DeleteFile() eine funktion ist, die einen booleanschen wert zurueck gibt, wuerde ich eher das ergebnis auswerten. in der oben vorliegenden konstellation macht das ganze noch weniger sinn, da egal ob DeleteFile() erfolgreich war oder nicht im except part sowieso nichts passiert. es ist als ob DeleteFile() ohne try expect dastehen wuerde, nur eben langsamer.
gewoehn es dir lieber nicht an und arbeite nur wenn noetig mit speicherschutzbloecken :) zu deinem eigentlichen problem: ich wuerde den inhalt des streams pruefen, so kannst du dir sicher sein, ob das ganze geklappt hat oder nicht. des weiteres wuerde ich auch pruefen, ob geloescht wurde oder nicht:
Delphi-Quellcode:
ich hoffe ich konnte dir ein wenig weiter helfen :)
if DeleteFile(datei) then
ShowMessage('erfolgreich') else ShowMessage('loeschen nicht erfolgreich') else |
Re: try except Frage
zum Beenden:
Application.Terminate ist ein sehr sehr schlechter Stil. Stecke den Download in eine Extra Funktion, die einen boolischen R+ckgabewert hat. Ist der Wert WAHR, dann fahre fort, ansonsten löschen und beenden. Aus der Funktion brichst du, nachdem du Result auf FALSE gesetzt hast mit Exit aus. Zum Beenden empfehle ich dir:
Bernhard Nochwas: Konstruktoren haben in Speicherschutzblöcken nichts verloren. Entweder es klappt auf anhieb oder nicht. Wenns nicht klappt, schlägt auch .Free auf jeden Fall fehl (da irendwie nicht <> nil). |
Re: try except Frage
Zitat:
Delphi-Quellcode:
Wenn es geklappt hat interessiert mich eine Meldung nicht. Aber wenn es nicht geklappt hat, möchte ich gerne wissen, warum nicht. ;)
if not Deletefile(...) then
ShowMessage(SysErrorMessage8GetLastError)); |
Re: try except Frage
Guten Abend...
folgendermaßen geändert.
Delphi-Quellcode:
except und finally vertauscht, Application.Terminate (warum auch immer ich das so gemacht habe) gegen Close getauscht ...
UDateiListe.Add(Ziel);
try fStream:= TFileStream.Create(Ziel,fmCreate or fmShareDenyNone); try idHTTP1.Get(Quelle, fStream); except MessageDlg('Update fehlgeschlagen...(Datei herunterladen)',mtError,[mbOK],0); for A := 0 to UDateiListe.Count - 1 do begin DeleteFile(UDateiliste.Strings[A]); end; FUMain.Close; end; finally fStream.Free; end; Danke an alle. :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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