例として、次のVB.NETコードのスニペットを想定してディレクトリを削除します。
Try
Dim SomeFolder="c:\somefolder"
System.IO.Directory.Delete(SomeFolder, True)
Catch ioex As System.IO.IOException
'What went wrong?
'File locked by another process?
'File not found?
'something else?
End Try
例外ハンドラーで、ディレクトリまたはその中のファイルが開いている場合、ユーザーにファイルを閉じて操作を再試行する機会を与えたいと思いますが、IOExceptionがロックの問題によって引き起こされた場合に限ります。
問題は、無効なパスやファイルに設定された読み取り専用フラグなど、さまざまな理由でIOExceptionがスローされる可能性があることです。これらの各条件は、に異なる値を設定します。例外オブジェクトのメッセージ属性ですが、エラーメッセージ内の特定の文字列のチェックをハードコーディングして、失敗の特定の原因を検出するのは非常に間違っていると感じます。エラー文字列が.netの将来のバージョンで一貫して表現されることにはあまり自信がなく、メッセージが英語以外で返される可能性に対処するためにローカリゼーションコードを書くことに煩わされることを嫌います。 。
非常に一般的な例外処理の懸念事項に対処するためのより良い方法が必要です。私は何かが足りないのですか?
更新/明確化:これまでの回答に感謝しますが、私の例を少し一般的にしすぎた可能性があります。少なくとも今のところ、私は特に、例外ハンドラー内の別のプロセスによってロックされているファイルの状態を検出する方法を探しています。