例外の詳細判断について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2020/10/6 12:25:15
> 別の例外理由でもSystem.IO.IOExceptionが出るとなると、上記前提は使えません。
たとえば、「デバイスの準備ができていません。」も IOException となることがあります。
文字通り、入出力(Input-Output)に対する汎用例外に過ぎません。
ファイル入出力に対しては、IOException 以外にも
様々な例外が起こりえます。たとえば、UnauthorizedAccessException など。
https://docs.microsoft.com/ja-jp/dotnet/standard/io/handling-io-errors?WT.mc_id=DT-MVP-8907
> ex.Message以外で例外の理由を区別する方法はありますか?
HResult で絞り込めるかと思います。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30283
たとえば、「デバイスの準備ができていません。」も IOException となることがあります。
文字通り、入出力(Input-Output)に対する汎用例外に過ぎません。
ファイル入出力に対しては、IOException 以外にも
様々な例外が起こりえます。たとえば、UnauthorizedAccessException など。
https://docs.microsoft.com/ja-jp/dotnet/standard/io/handling-io-errors?WT.mc_id=DT-MVP-8907
> ex.Message以外で例外の理由を区別する方法はありますか?
HResult で絞り込めるかと思います。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30283
投稿者 nameko  (社会人)
投稿日時
2020/10/6 11:57:41
この前作成したプログラムでSystem.IO.IOException例外が発生しました。
メッセージは、「別のプロセスで使用されているため、プロセスはファイル '(ファイル名)' にアクセスできません。」でした。
そこで、Try~Catch exでSystem.IO.IOExceptionを検知した場合、
該当ファイルが別プロセスで使用されていることを前提にした対応を行おうと思ったのですが、
もし、別の例外理由でもSystem.IO.IOExceptionが出るとなると、上記前提は使えません。
System.IO.IOExceptionは「別のプロセスで使用されているため...」以外の理由でも出ますか?
その場合、ex.Message以外で例外の理由を区別する方法はありますか?
メッセージは、「別のプロセスで使用されているため、プロセスはファイル '(ファイル名)' にアクセスできません。」でした。
そこで、Try~Catch exでSystem.IO.IOExceptionを検知した場合、
該当ファイルが別プロセスで使用されていることを前提にした対応を行おうと思ったのですが、
もし、別の例外理由でもSystem.IO.IOExceptionが出るとなると、上記前提は使えません。
System.IO.IOExceptionは「別のプロセスで使用されているため...」以外の理由でも出ますか?
その場合、ex.Message以外で例外の理由を区別する方法はありますか?
> HResult で絞り込めるかと思います。
> http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30283
これですね。
Catch ex As IOException When ex.HResult = STIERR_SHARING_VIOLATION '&H80070020
'プロセスはファイルにアクセスできません。別のプロセスが使用中です。
Catch ex As IOException When ex.HResult = STIERR_DEVICE_LOCKED '&H80070021
'プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。
早速確認してみようと思います。
ありがとうございました。