方法 : Visual Basic で I/O Try...Catch ブロックを実装する
更新 : 2007 年 11 月
Exception、IOException、および IOException から派生するすべての例外を処理する Try...Catch ブロックを実装するコードの例は、次のとおりです。
使用例
この例では、最も固有な例外から一般的な例外の順に例外を配置します。各々の例外は順にテストされます。
このコード例は、IntelliSense のコード スニペットとしても使用できます。コード スニペット ピッカーでは、コード例は [ファイル システム - ドライブ、フォルダ、およびファイルの処理] にあります。詳細については、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照してください。
Try
' Add code for your I/O task here.
Catch dirNotFound As System.IO.DirectoryNotFoundException
' Code to handle DirectoryNotFoundException.
Catch fileNotFound As System.IO.FileNotFoundException
' Code to handle FileNotFoundException.
Catch pathTooLong As System.IO.PathTooLongException
' Code to handle PathTooLongException.
Catch ioEx As System.IO.IOException
' Code to handle IOException.
Catch security As System.Security.SecurityException
' Code to handle SecurityException.
Catch ex As Exception
' Rethrow exception if anything else has occurred.
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 で Catch ブロックを使用してエラーをフィルタ処理する
概念
IntelliSense コード スニペットの最適な使用方法
参照
Try...Catch...Finally ステートメント (Visual Basic)