
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで質問です。 ハイパー...
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
JSSEを使用したProxy経由のHTTP...
-
「パス名が無効です」の発生原因
-
VB6.0開発ソフトインストールで...
-
【関数】同じ関数なのに、エラ...
-
Returnに対するGoSubがありません
-
VB:「実行時エラー53 実行ファ...
-
OUTLOOK VBA 指定フォルダ内の...
-
この EXCEL VBA の意味を教えて...
-
VBAでDLLが見つからないエラー
-
Excelファイルのマクロによる排...
-
batファイルでレジストリキーの...
-
Vba ファイル書き込み時に書き...
-
アクセスのクエリでコンパイル...
-
NAS上のファイルの使用中が解除...
-
Excel 2003 のエラーメッセージ
-
Excel2013 VBAでAccess2013に接...
-
エクセルマクロでエラーの原因...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
「パス名が無効です」の発生原因
-
ExcelVBAで既に開いてるwordを...
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
gccを行ってもexeファイルが生...
-
PowerShellを使って関連付けら...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
エクセルマクロでエラーの原因...
-
VBでファイルが開かれているか...
-
【COBOL】read文でエラー
-
FTPの送信結果を検知したい
-
VBから参照できないCのDLLを使...
-
fgets関数のEOFの扱い方について
-
ACCESS VBAでのインポート
-
データベースソフトのアクセス2...
-
DisplayAlertsブロパティで ”実...
おすすめ情報