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ランキング
-
ASPからACCESSのOPENどうしても...
-
PowerShellを使って関連付けら...
-
DisplayAlertsブロパティで ”実...
-
gccを行ってもexeファイルが生...
-
Excelのエラー
-
access テキストボックスの値取得
-
Returnに対するGoSubがありません
-
エクセル「これ以上新しいフォ...
-
VBAのChangeFileOpenDirectory...
-
VB6 Dir関数で52エラー発生
-
Excel 終了時のエラー
-
構造体をランダムファイルに書...
-
「アクティブ ユーザーが多すぎ...
-
Excel 2003 のエラーメッセージ
-
パソコンで受信したGmailのファ...
-
fileのリスト作成のマクロ
-
アクセスのクエリでコンパイル...
-
Excelのファイルが開けま...
-
すでにファイルが開かれている...
-
FTPの送信結果を検知したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBから参照できないCのDLLを使...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
OUTLOOK VBA 指定フォルダ内の...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
NAS上のファイルの使用中が解除...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
FORTRANの実行エラーについて
-
Excelvbaのマクロのファイル名...
-
Excelファイルのマクロによる排...
-
エクセルマクロでエラーの原因...
おすすめ情報