- PR -

光磁気ディスク(MO)等のエラーについて

1
投稿者投稿内容
cafe
会議室デビュー日: 2003/05/06
投稿数: 16
投稿日時: 2003-05-23 09:32
いつも参考にさせてもらっています。

vb.netで開発しているんですが、
vb4.0やvb6.0の時などはエラーを以下のソースのように取得していました。
vb.netになってからtry〜Catchイベントでエラーを拾っているんですが、
try〜Catchイベントを使用してるときはResumeが使用できないので、
Resumeに変わるものってあるのでしょうか?
(マニュアルで探したのですが、発見できませんでした)

あとエラーコードってvb.netでも同じ番号なのでしょうか?

誰かご存知の方がいましたら教えてください。

On Error GoTo COPY_Err

COPY_Err:
Select Case Err.NUMBER
Case 61
MSG_STATUS_01 = MsgBox("光磁気ディスク(MO)が容量不足です。_
    ERR = " & Error(Err.NUMBER), vbCritical + vbAbortRetryIgnore)
Case 68, 71
MSG_STATUS_01 = MsgBox("光磁気ディスク(MO)がセットされていません。_
    ERR = " & Error(Err.NUMBER), vbCritical + vbAbortRetryIgnore)
End Select
Select Case MSG_STATUS_01
Case vbAbort '// 中止
Exit Function
Case vbRetry '// 再試行
Resume
Case vbIgnore '// 無視
Resume Next
End Select
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-05-23 14:08
こんにちは。

>>あとエラーコードってvb.netでも同じ番号なのでしょうか?

 Try〜Catch、例外処理というのは、「エラー」とはちょっと違います。文字通り、例外的な処理をするための物です。普通に使うぶんでは、例外的な処理はエラー処理とほとんど等しい、ということです。
 例外にはエラー番号という考え方はありません。なぜなら例外は、例外的な状況を表すものであり、エラー番号によって表そうとしていたものだからです。例外を発生させることを「スローする、投げる」と言いますが(だから捕捉catchする)、例外クラスのインスタンス(への参照)が飛んできます。通常、〜Exceptionというクラスです。IO処理で発生する例外なら、System.IO.IOExceptionか、それから派生するクラスになります。IOExceptionから派生する例外クラスがスローされたと言うことは、それだけでIOに関する処理で例外的な状況が発生したとわかるのです。

 Resumeについてですが、発生した例外を元に戻すことはできないので、ループと組み合わせます。

dim CanTerminate as boolean = false
do
try
' コピー処理
CanTerminate = true
catch ex as System.IO.IOException
' 例外処理
messagebox.show(ex.message)
end try
loop while CanTerminate = false
cafe
会議室デビュー日: 2003/05/06
投稿数: 16
投稿日時: 2003-05-24 14:42
Jittaさんありがとうございました。

いままで疑問だったTry〜Catchの意味が、Jittaさんの説明で良く解りました。
エラー番号などの考え方ではないということですね。

早速loop処理で実行してみます。

vb初心者なのでまた質問をすると思いますが、
その時はまた教えてください。



1

スキルアップ/キャリアアップ(JOB@IT)