ファイルに文字列を書き込む

サンプルコード

Sub Main()
  Dim WriteStr As String = "Hellow World!!"

  '一気にすべて書き込む
  System.IO.File.WriteAllText("C:\WriteFile.txt", WriteStr)

  '文字コードを指定する場合
  System.IO.File.WriteAllText("C:\WriteFile.txt", WriteStr, System.Text.Encoding.Default)

  'StreamWriterを使用して書き込む
  Dim SR As System.IO.StreamWriter = New System.IO.StreamWriter("C:\WriteFile.txt", WriteStr)
  SR.WriteLine(WriteStr)
  SR.Close()
End Sub

System.IO.File.AppendAllText()メゾットでは第三引数に値を指定することで、文字コードを指定できます。

指定されたファイルにすでに内容がある場合、その内容は消去され書き込まれます。ファイルがない場合パスで指定されたファイルを作成します。

StreamWriterではCloseしないと再度開く時に、エラーが発生します。確実に閉じるための手順は以下の通り。


Dispose/Closeを確実に実行する

もし何かしらのエラーでstreamを閉じる事が出来なかったら、再びそのファイルを読み込むときにエラーが発生します。下のサンプルではsrのstreamを閉じていないので,trのstreamを作成する時にエラーが発生します。

エラーサンプル

Sub Main()
  Dim sr As New StreamWriter("c:\test.txt")
  sr.WriteLine("aaa")
  sr.WriteLine("bbb")

  Dim tr As New StreamWriter("c:\test.txt")'ここでエラー
  tr.WriteLine("aaa")
  tr.WriteLine("bbb")
  tr.Close()
End Sub

Try-Catchを確実に行えていればよいのですが、万が一記載忘れをした場合はコンパイルエラーとならずに、実行エラーとなってしまいます。そこで、"Using"ステートメントを使用するとエラーが発生した場合も、自動で"Dispose"がコールされるので、エラー処理を書く手間が省けます。

サンプルコード

Sub Main()
  Try
    Using sr As New StreamWriter("c:\test.txt", "aaa")
      Throw New Exception 'ここでわざとエラーをスローしてみる
      sr.Write("bbb")
    End Using
  Catch 
  End Try
   
  Dim tr As New StreamWriter("c:\test.txt")
  tr.WriteLine("aaa")
  tr.WriteLine("bbb")
  tr.Close()
End Sub

"sr"が閉じられていなくても、"tr"のストリームがファイルを開ける事に注目してください。