例外処理に関して
質問なのですが、よろしくお願い致します。
ファイルに空白行があった場合、任意に例外を発生させることをしているのですが、
(例外処理内容:ファイルにログを出力する)
例外が2回キャッチされているようで、2回目にファイル(ログファイル)は既に開かれています。というエラーが出ますが、以下のソースでは、呼出元と呼び出されたメソッドともに例外を処理してしまうのでしょうか?
また、どう改善したらいいでしょうか?
ご教授よろしくお願い致します。
呼出元
public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
Dim cls As New testClass
cls.timer1()
Catch e as Exception
'ログファイル出力
End Try
End Sub
呼び出されるメソッド
Public Sub Timer1()
try
FileOpen(1,"ファイルパス",OpenMode.Input)
if Trim(LineInput(1)) = "" Then
FileClose(1)
Throw New Exception
End If
Catch e as Exception
'ログファイル出力
End Try
End Sub
お礼
回答ありがとうございます。 つまり、コンストラクタで例外が発生すると、デストラクタが呼び出されず、 デストラクタで開放を行うものがリークするというわけですね? 対応としては、コンストラクタ内でキャッチして適切に処理すれば良いのでしょうか? たとえば、newが失敗するなど、その時点でオブジェクトが死に体となったら、try-catchでそれ以前のメモリを開放し、再度throwするなどの対応は問題ないのでしょうか?