既存のファイルを開いて上書きしようとする場合など、既にストリームに何らかの内容が書き込まれている場合、書き込んだ後にSetLengthでストリームの長さも変更しないと以前の内容が残ります。 例えば、FileStreamで長さ16バイトのファイルを開いて8バイトのデータを書き込む場合、SetLengthでストリームの長さも8バイトに設定しないと、ファイルの長さは16バイトのままになります。
SetLengthメソッドを使ってStreamの長さを書き込んだ長さに合わせて変更する
Imports System
Imports System.IO
Class Sample
Shared Sub Main()
Using stream As Stream = File.OpenWrite("sample.dat")
' 現在のstreamの長さを表示
Console.WriteLine(stream.Length)
' 書き込むデータが格納されているバイト配列
Dim buffer() As Byte = New Byte(7) {&h41, &h42, &h43, &h44, &h45, &h46, &h47, &h48}
' bufferの8バイト分をstreamに書き込む
stream.Write(buffer, 0, 8)
Console.WriteLine(stream.Length)
' 現在の書き込み位置(8バイト目)をstreamの長さとして設定する
stream.SetLength(stream.Position)
Console.WriteLine(stream.Length)
End Using
End Sub
End Class