ファイルの末尾に文字列を追記する。(System.IO.File.AppendAllText)

ファイルの末尾に文字列を追記するにはSystem.IO.File.AppendAllTextメソッドを使用します。(いくつか方法がありますが最も簡単な方法)


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str1 As String = "Hello World"
System.IO.File.AppendAllText("\\server\a.txt", str1)
End Sub

End Class

.NETから出力される文字は文字コードUTF-8であるため文字化けが発生することがあります。Windows(日本語版)の標準文字コードSHIFT-JISであるためです。AppendAllTextの引数で、文字コードを指定することができるのでSHIFT-JISで出力が必要な箇所は以下とします。


System.IO.File.AppendAllText("\\server\a.txt", str1, System.Text.Encoding.GetEncoding("Shift-Jis"))

ファイルの最終行を削除する。ファイルの末尾の改行コードを削除する。(String.LastIndexOf)

ファイルの最終行を削除する場合は、String.LastIndexOfで末尾から改行コード(vbCrLf)を検索して見つかった位置からの文字列を削除します。すべての行に改行コードが付いている場合は、ファイルの末尾から2つ目の位置にある改行コード以降の文字列を最終行となります。但し、最終行に改行コードが付いていないケースを想定すると、String.LastIndexOfで見つけた1つ目の位置以降を最終行と考える必要があります。

また、改行コードが見つからない場合は文字列全体が最終行となります。


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

Dim str1 As String = "Hello World" + vbCrLf + "It's a wonderful world" + vbCrLf + "love & peace" + vbCrLf

Dim vbcrlfPos As Integer = str1.LastIndexOf(vbCrLf)
If vbcrlfPos >= 0 Then

If vbcrlfPos = str1.Length - vbCrLf.Length Then
' 末尾が改行の場合は、もう一つ前の改行位置を取得する。
vbcrlfPos = str1.LastIndexOf(vbCrLf, str1.Length - vbCrLf.Length)
End If

' 最終行を取り除く
str1 = str1.Substring(0, vbcrlfPos + vbCrLf.Length)

Else
' 改行コードが無い場合は、文字列全体を最終行とみなす。
str1 = String.Empty
End If

Debug.Print(str1)

End Sub

ファイルの末尾の改行コードを削除する場合は簡単で、LastIndexOfで見つけた場所以降を切り出します。


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim str1 As String = "Hello World" + vbCrLf + "It's a wonderful world" + vbCrLf + "love & peace" + vbCrLf

Dim vbcrlfPos As Integer = str1.LastIndexOf(vbCrLf)
If vbcrlfPos >= 0 Then
' 末尾の改行を取り除く
str1 = str1.Substring(0, vbcrlfPos)
End If

Debug.Print(str1)

End Sub