方法 : Visual Basic で例外をキャッチする

更新 : 2007 年 11 月

この例は、Try ブロックと Catch ブロックを使用して、例外をキャッチする方法を示します。

使用例

この例は、Try?cCatch ブロックを使用して、OverflowException をキャッチする方法を示します。

このコードの例は、IntelliSense コード スニペットとしても利用できます。コード スニペット ピッカーでは、これは [Visual Basic Language] にあります。詳細については、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照してください。

Dim Top As Double = 5
Dim Bottom As Double = 0
Dim Result As Integer
Try
    Result = CType(Top / Bottom, Integer)
Catch Exc As System.OverflowException
    MsgBox("Attempt to divide by zero resulted in overflow")
End Try

この例で必要な要素は次のとおりです。

  • System 名前空間への参照

ExceptionIOException、および IOException から派生したすべての例外を処理する、Try...Catch ブロックを実装するコード例を次に示します。

Try
    ' Add code for your I/O task here. 
Catch dirNotFound As System.IO.DirectoryNotFoundException
    Throw dirNotFound
Catch fileNotFound As System.IO.FileNotFoundException
    Throw fileNotFound
Catch pathTooLong As System.IO.PathTooLongException
    Throw pathTooLong
Catch ioEx As System.IO.IOException
    Throw ioEx
Catch security As System.Security.SecurityException
    Throw security
Catch ex As Exception
    Throw ex
Finally
    ' Dispose of any resources you used or opened in the Try block. 
End Try

実行するコードを Try ブロックに追加します。

堅牢性の高いプログラム

Try...Catch ステートメントでのデータの操作をラッピングするための開始点として、このコードのブロックを使用します。この Try...Catch ブロックは、すべての例外をキャッチして再スローするように設計されています。これは、必ずしもプロジェクトに最適な方法でない可能性もあります。例外処理のオプションの詳細については、「IntelliSense コード スニペットの最適な使用方法」を参照してください。

ユーザーが有効なファイル名のみを選択できるように制限されている、OpenFileDialog コンポーネント (Windows フォーム) コンポーネント コントロールおよび SaveFileDialog コンポーネント (Windows フォーム) コンポーネント コントロールなどの Windows フォーム コントロールを使用して、例外の可能性を減らすことができます。FileInfo.Exists プロパティによって、ファイルを開く前にファイルが存在するかどうかをチェックできます。しかし、これらのコントロールやクラスの使用は安全な方法ではありません。ユーザーがファイルを選択してから、コードが実行されるまでの間に、ファイル システムが変更される可能性があります。したがって、ファイルの操作中は、ほとんど常時例外処理が必要になります。

セキュリティ

多くのファイルに関するタスクでは、アセンブリに対して FileIOPermission クラスで特権レベルが許可されている必要があります。部分的に信頼されているコンテキストでプロセスを実行している場合は、権限不足のため例外がスローされることがあります。詳細については、「コード アクセス セキュリティの基礎」を参照してください。また、ユーザーがファイルに対してアクセスしなければならない場合は、権限が必要となります。詳細については、「アクセス制御リスト (ACL)」を参照してください。

ファイル名の拡張子に基づいてファイルの内容を判断しないでください。たとえば、Form1.vb というファイルは Visual Basic のソース ファイルではない可能性もあります。

参照

処理手順

方法 : Visual Basic で例外をスローする

方法 : Visual Basic で Try...Catch ブロックを使用してコードを検査する

方法 : Visual Basic で Try...Finally ブロックを使用してリソースをクリーンアップする

方法 : Visual Basic で Catch ブロックを使用してエラーをフィルタ処理する

方法 : 例外の内部例外をチェックする

例外処理のトラブルシューティング

概念

構造化例外処理と非構造化例外処理に適した状況