AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu mehreren Try's

Ein Thema von Stefan Hueg · begonnen am 20. Jun 2006 · letzter Beitrag vom 20. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#1

Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:06
Ich stehe nun vor folgendem Problem, konnte bisher keine befriedigende Antwort dazu finden.

Szenario:
Ich will eine Ini-Datei öffnen, aus ihr irgendwas lesen und diese dann wieder freigeben. Falls währenddessen irgend ein Fehler auftritt soll eine Fehlermeldung ausgegeben werden.

Nun, eigtl. nicht schwierig. Aber es gibt mehrere Lösungsansätze und ich würde gerne wissen welcher der eleganteste bzw. Optimalste ist.

Beispiel 1:
Delphi-Quellcode:
procedure LoadIni(Filename: String);
var
  FileSettings: TIniFile;
  Test: String;
begin
  try
    try
      FileSettings := TIniFile.Create(Filename);
      Test := FileSettings.ReadString('Test', 'Test', 'Test');
    except on E: Exception do
      ShowMessage('Fehler');
    end;
  finally
    FileSettings.Free;
  end;
end;
Beispiel 2:
Delphi-Quellcode:
procedure LoadIni(Filename: String);
var
  FileSettings: TIniFile;
  Test: String;
begin
  try
    FileSettings := TIniFile.Create(Filename);
    Test := FileSettings.ReadString('Test', 'Test', 'Test');
    FileSettings.Free;
  except on E: Exception do begin
    ShowMessage('Fehler');
    FileSettings.Free;
  end;
  end;
end;
Mein Problem dabei ist dass ich nicht weiss ob man einfach so mehrere Try's schachteln kann. Habe irgendwo mal gelesen dass der Compiler für jeden Codeblock bei einem Try quasi einen "Ausweichcode" für den Fehlerfall anlegt, und das währen ja dann mehrere.

Die zweite Möglichkeit ist weit weniger elegant. Bitte klärt mich auf ^^
Stefan Hueg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.335 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:12
Warum eigentlich 2 mal try eines würde doch reichen.

Delphi-Quellcode:
try
  ...
except
  on ...
finally
 ...
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:13
Das funktioniert? Schande über mein Haupt....nu programmiere ich schon so lange mit Delphi und weiss das nicht....wieder was dazu gelernt...mal probieren ^^
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:16
die erste Variante ist völlig falsch denn du würdest filesettings auch mit Free versuchen frei zu geben wenn das Create schon fehlschlägt. Wenn das Create aber fehlschlägt ist nix frei zu geben. Und da die Variable lokal ist, ist sie auch nicht nil so das Free einen Fehler verursacht weil du es auf einen Speicherbereich anwendest wo gar kein Object liegt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:19
Der Quellcode:

Delphi-Quellcode:
try
  SettingFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'settings.ini');
except
  on E: Exception do
    ShowMessage('Fehler');
finally
  SettingFile.Free;
end;
funktioniert nicht. Mein Compiler muckt da rum.

@SirThornberry:
Also

Delphi-Quellcode:
try
  SettingFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'settings.ini');
finally
  SettingFile.Free;
end;
Sollte man nicht verwenden da nicht sichergestellt ist dass Create überhaupt erfolgreich war, habe ich das richtig verstanden?
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:28
genau, das Free soll ja nur ausgeführt werden wenn das Create erfolgreich war und somit auch speicher zum freigeben vorhanden ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 17:32
Also ich stelle das create immer vor den ressourcenschutzblock.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 18:04
Ok ich glaube ihr versteht noch nicht so recht was ich erreichen will ^^

Anderes Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Test: TIniFile;
begin
  try
    Test := TIniFile.Create('C:\test.txt');
    Test.WriteString('Test', 'Test', 'Test');
    Test.Free;
  except
    on EIniFileException do
      ShowMessage('Fehler bei Ini-File');
  else
    ShowMessage('Irgend ein anderer Fehler');
  end;
end;
Wenn das Objekt erstellt, in die Ini-Datei geschrieben werden konnte: Kein Problem
Aber tritt bei WriteString beispielsweise ein Fehler auf, weil die Datei schreibgeschützt ist beispielsweise, wird das Objekt gar nicht mehr freigegeben, obwohl es erfolgreich erstellt wurde.

Ich müsste nun irgendwie herausfinden ob das Objekt erfolgreich erstellt wurde, dann kann ich sicher sagen dass ich es auch freigeben kann.
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 18:05
Ein Post über deinem steht die Lösung.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 18:11
*sich von Khabarakh bestätigt sieht*

Ein Ressourcenschutzblock sieht (bei mir) so aus:

Delphi-Quellcode:
objekt := TObjekt.Create;
try
  objekt.dosomething;
  objekt.accessfragilethings;
finally
  objekt.Free;
end;


(für ein zusätzliches except muss man tatsächlich schachteln! Zumindest bei D2005PE)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf