3.11 Fehlerbehandlung mit Try ... Catch ... Finally ... End Try
 
Beim Zugriff auf Dateien kann viel schief gehen: Sie haben vielleicht nicht die Berechtigung, die Datei zu lesen oder in die Datei zu schreiben. Die Datei gibt es nicht, die Festplatte ist voll, der Dateiname ist ungültig und so weiter. Wenn ein solcher Fehler unter .NET auftritt, dann generiert das System eine Ausnahme. Mit dem Try ... Catch ... Finally-Konstrukt können Sie in Ihrem Code auf diese Ausnahmen reagieren.
Das Konstrukt ist folgendermaßen aufgebaut:
Try
' Fehleranfälliger Code, z. B. Dateizugriffe
Catch ex As Exception
' Hier wird auf Fehler reagiert.
End Try
' Hier geht es weiter, egal ob Fehler oder nicht.
Wenn zwischen Try und Catch ein Fehler auftritt, fährt die Programmausführung hinter Catch fort. Wenn zwischen Try und Catch kein Fehler auftritt, wird der Catch-Zweig übersprungen und das Programm wird direkt hinter End Try fortgeführt.
Auch Ausnahmen sind Objekte. .NET definiert zahlreiche Klassen für die unterschiedlichen Arten von Fehlern, die auftreten können. Auf unterschiedliche Fehler können Sie unterschiedlich reagieren, indem Sie für spezielle Ausnahmen spezielle Catch-Zweige definieren. Bei Dateizugriffen könnten Sie etwa unterschiedlich reagieren, je nachdem, ob der Pfad ungültig ist oder ob die Datei selbst nicht gefunden werden kann. vb_13.aspx demonstriert ein Beispiel. Wenn ein Teil des Pfades nicht gefunden werden kann, wird eine Ausnahme vom Typ DirectoryNotFoundException generiert. Wenn die Datei selbst nicht gefunden werden kann, wird der Fehler FileNotFoundException generiert.
<!-- vb_13.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim datnam As String
datnam = "c:\vbnet9840-lsop:.txt"
Dim s, t As String
Try
Dim schreiber As _
New System.IO.StreamWriter(datnam, True)
schreiber.WriteLine _
("Ich war hier : " & now.toString)
schreiber.Close()
Dim leser As New System.IO.StreamReader (datnam)
s = leser.ReadLine()
Do Until s Is Nothing
t &= s & "<br>"
s = leser.ReadLine()
Loop
leser.close()
Catch ex As System.IO.DirectoryNotFoundException
t= "Das ist der Fehler DirectoryNotFoundException. "
t &= ex.Message
Catch ex As System.IO.FileNotFoundException
t= "Das ist der Fehler FileNotFoundException. "
t &= ex.Message
Catch ex As Exception
t = "Das ist irgendein anderer Fehler. "
t &= ex.Message
End Try
ausgabe.innerHTML = t
End Sub
</script>
<html><head><title>
Einstieg in VB.NET
</title></head>
<body>
<h3>Einstieg in VB.NET</h3>
<p id="ausgabe" runat="server"></p>
</body></html>
Achten Sie auf die Reihenfolge, in der die Catch-Zweige angegeben werden. Wenn ein Fehler auftritt, führt .NET denjenigen Zweig aus, der als Erster auf die Ausnahme passt. Wenn Sie den Zweig Catch ex As Exception an erster Stelle anführen würden, dann würde immer dieser Zweig ausgeführt, denn alle Ausnahmen stammen von Exception ab.
Vor dem End Try- Statement können Sie außerdem zusätzlich noch einen Finally-Zweig angeben. Dieser wird in jedem Fall ausgeführt, egal, ob ein Fehler auftritt oder nicht.
|