[リストへもどる]
一括表示

投稿時間:2003/05/23(Fri) 09:55
投稿者名:tadashi
URL :
タイトル:
光磁気ディスク(MO)エラーなどについて
いつも参考にさせてもらっています。

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

投稿時間:2003/05/23(Fri) 10:51
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 光磁気ディスク(MO)エラーなどについて
> try〜Catchイベントを使用してるときはResumeが使用できないので、
> Resumeに変わるものってあるのでしょうか?

試していませんが、こんな感じで対処できないでしょうか。

bolRetry = True
Do
  Try
      '
      'メインの処理
      '
      bolRetry = False    '成功したのでリトライは行わない
  Catch eFileNotFound As System.IO.FileNotFoundException
      'ファイルが見つからなかったときの処理
      '処理を中止するなら、bolRetry を False にする。
      'リトライするなら、bolRetry は True のまま。
  Catch eIOExcep As System.IO.IOException
      'その他のI/Oエラーに対する例外処理
  Catch 必要であればさらに別の例外フィルタを記述
      ':
      ':
      ':
  End Try
Loop While bolRetry


なお、MSDNの記事にある「Dr. GUI.NET #5」には、以下のような意見も書かれています。

》 On Error を含むコードを移植する場合、エラー処理の部分を変更する必要は
》 ありませんが、将来にわたってコードの理解や管理を容易にするためには、
》 エラー処理の更新を検討することをお勧めします。

》 新しく書くコードでは、構造化されたエラー処理を使う方が、コードが明快になります。
》 ただし、例外が発生した場所やその直後から実行を再開できる Resume の柔軟性が
》 必要な場合は、非構造化エラー処理(OnError)を使うのも手です。その場合、コードを
》 整理して書くことが大切です。くれぐれもスパゲッティ コードを書かないように!


> あとエラーコードってvb.netでも同じ番号なのでしょうか?
HRESULT系の値については、同じ番号のようです。それ以外のコードはわかりません。m(_ _)m

ただ、エラー番号だけで処理してしまうと、あとから見たときに意味がわかりにくいので、
各種例外クラスを使った判定も併用した方が良いでしょう。

投稿時間:2003/05/24(Sat) 14:51
投稿者名:tadashi
URL :
タイトル:
Re^2: 光磁気ディスク(MO)エラーなどについて
魔界の仮面弁士さんありがとうございました。

vb.netになってからは(try〜catchを使用する場合)、
エラー番号等の考え方ではないんですね。(勉強不足でした)

早速loop処理で実行して見たいと思います。
ありがとうございました。