アプリ版:「スタンプのみでお礼する」機能のリリースについて

visual studio 2010 vb.netでの質問です。OpenTextFileWriter での書き込み処理時、エラーが発生した場合、Try,Catch ,FinallyのFinallyの部分でファイルをクローズしたいと思い以下のコードを書きましたが警告 「変数 'tw' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。」が発生してしまいます。ファイルを必ずクローズしたい(エラーが発生しても、しなくても)と思うのですが、どのようにコードを書けばうまくいくのでしょうか。お教えいただけるとありがたいです。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Dim wfileNamePath As String
Dim data As String

Dim tw As System.IO.TextWriter

wfileNamePath = "C:\test\test.txt"

Try

data = "abcd"

tw = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default)

tw.WriteLine(data)

Catch ex As Exception
MsgBox("エラー発生")
Finally
tw.Close()
End Try


End Sub
End Class

A 回答 (4件)

オブジェクトの初期化をtryの中で記述すると、警告が出ますよ。

    • good
    • 0
この回答へのお礼

なるほど、警告のでる原因はそれだったのですね。先程試したら、警告とれました。ありがとうございました。

お礼日時:2012/02/29 01:45

> Dim tw As System.IO.TextWriter


Dim tw As System.IO.TextWriter = Nothing

> tw.Close()
If tw IsNot Nothing Then tw.Close()

とすればよい。

それよりUsing文で書くと簡単です。

Try
  data = "abcd"
  Using tw As TextWriter = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default)
    tw.WriteLine(data)
  End Using
Catch ex As Exception
  MsgBox("エラー発生")
End Try

※ End Usingで確実にDisposeが呼ばれるので、明示的にCloseする必要がない。

Usingステートメントで簡単、確実にファイルをクローズ
http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_ …
    • good
    • 0
この回答へのお礼

usingの具体的使用方法、参考HPを教えていただきまして本当にありがとうございました。

お礼日時:2012/02/29 01:54

通常はTry-Finallyの代わりにUsingを使えば事足ります。


Using tw As TextWriter = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default)
tw.WriteLine(data)
End Using

ただし,Catch節に相当するコードは書けないので,今回の場合は,Finally節を
Finally
If tw IsNot Nothing Then tw.Close()
End Try
とするのがよいでしょう。
# Try-CatchのTry節にUsingを入れてもよいですが。
    • good
    • 0

tw = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default)



をTryの前(上)に移動すればいいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!