AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

try except Frage

Ein Thema von haentschman · begonnen am 12. Jul 2008 · letzter Beitrag vom 12. Jul 2008
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

try except Frage

  Alt 12. Jul 2008, 20:52
Hallo alle miteinander...

ich seh den Wald vor Bäumen nicht...
Delphi-Quellcode:
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;
soll wie folgt funktionieren:
- 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.

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 ?
Könnte mir jemand den Knoten lösen ?

Danke....
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#2

Re: try except Frage

  Alt 12. Jul 2008, 21:49
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:
  if DeleteFile(datei) then
    ShowMessage('erfolgreich') else
      ShowMessage('loeschen nicht erfolgreich') else
ich hoffe ich konnte dir ein wenig weiter helfen :)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: try except Frage

  Alt 12. Jul 2008, 22:41
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:
  • Form.Close
  • PostQuitMessage
  • Halt, welches dann aber nicht aufräumt (eher doch nicht so zu empfehlen)

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).
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: try except Frage

  Alt 12. Jul 2008, 23:49
Zitat von 1234588:
Delphi-Quellcode:
  if DeleteFile(datei) then
    ShowMessage('erfolgreich') else
      ShowMessage('loeschen nicht erfolgreich') else
Wenn wir schon soweit gekommen sind, dann machen wir doch auch noch den letzten Schritt:
Delphi-Quellcode:
if not Deletefile(...) then
  ShowMessage(SysErrorMessage8GetLastError));
Wenn es geklappt hat interessiert mich eine Meldung nicht. Aber wenn es nicht geklappt hat, möchte ich gerne wissen, warum nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

Re: try except Frage

  Alt 12. Jul 2008, 23:55
Guten Abend...

folgendermaßen geändert.
Delphi-Quellcode:
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;
except und finally vertauscht, Application.Terminate (warum auch immer ich das so gemacht habe) gegen Close getauscht ...

Danke an alle.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:39 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