
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
No.4
- 回答日時:
> 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_ …
No.2
- 回答日時:
通常は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を入れてもよいですが。
No.1
- 回答日時:
tw = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default)
をTryの前(上)に移動すればいいのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
ASP.NET 2.0にてアプリが動作し...
-
VBでファイルが開かれているか...
-
Access2013にてドラッグ&ドロ...
-
Returnに対するGoSubがありません
-
fcloseで発生するエラーについて。
-
access テキストボックスの値取得
-
システムのシャットダウンは既...
-
【COBOL】read文でエラー
-
Excel 2003 のエラーメッセージ
-
2003アクセス → 2010移行のト...
-
CSVファイルが開かれているかど...
-
VB6 Dir関数で52エラー発生
-
アクセスのクエリでコンパイル...
-
PowerShellを使って関連付けら...
-
OUTLOOK VBA 指定フォルダ内の...
-
VBインストールエラー
-
Server2003 IIS6.0上での動作
-
VB6.0開発ソフトインストールで...
-
アウトルックが起動できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで質問です。 ハイパー...
-
Excel 2003 のエラーメッセージ
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
access テキストボックスの値取得
-
【COBOL】read文でエラー
-
アクセスのクエリでコンパイル...
-
Returnに対するGoSubがありません
-
batファイルでレジストリキーの...
-
VBから参照できないCのDLLを使...
-
NAS上のファイルの使用中が解除...
-
データベースソフトのアクセス2...
-
VB6 Dir関数で52エラー発生
-
【関数】同じ関数なのに、エラ...
-
gccを行ってもexeファイルが生...
-
FORTRANの実行エラーについて
-
fgets関数のEOFの扱い方について
-
FTPの送信結果を検知したい
-
VBでファイルが開かれているか...
-
ASP.NET 2.0にてアプリが動作し...
おすすめ情報