Ich habe mir gerade mal etwas Gedanken über Exceptions gemacht und wie man einen Code wasserdicht bekommt. Dies ist mein Ergebnis:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
TEXT = '
Dies ist ein Testtext.';
FILENAME = '
c:\test.txt';
var
fs: TFileStream;
s:
String;
begin
s := TEXT;
try {1}
fs := TFileStream.Create(FILENAME, fmCreate);
try {2}
try {3}
fs.WriteBuffer(Pointer(s)^, length(s));
except
on E: EWriteError
do ShowMessage(E.
Message);
end;
finally
FreeAndNil(fs);
end;
except
on E:
Exception do ShowMessage(E.
Message);
end;
end;
Jetzt frage ich mich, das ist doch der blanke Wahnsinn: Drei verschachtelte
try-Blöcke!
{1}: Um die
Exception abzufangen, wenn die Methode Create von TFileStream fehlschlägt. Hier bringe ich zwar auch nur die Fehlermeldung, die die
Exception selber bringen würde, aber eventuell will man ja noch was anders machen.
{2}: Der obligatorische Ressourcenschutzblock.
{3}: Um die
Exception abzufangen, die WriteBuffer auslöst, wenn was schief geht beim Schreiben.
Ist das denn normal oder übertreibe ich hier? Wie gesagt, meine
ShowMessages steh da nur für alternativen Code. Das heißt will man anstatt den
ShowMessages noch was anderes machen, dann müssen drei
try-Blöcke sein - oder?