既存のファイルを開いて上書きしようとする場合など、既にストリームに何らかの内容が書き込まれている場合、書き込んだ後にSetLengthでストリームの長さも変更しないと以前の内容が残ります。 例えば、FileStreamで長さ16バイトのファイルを開いて8バイトのデータを書き込む場合、SetLengthでストリームの長さも8バイトに設定しないと、ファイルの長さは16バイトのままになります。
SetLengthメソッドを使ってStreamの長さを書き込んだ長さに合わせて変更する
using System;
using System.IO;
class Sample {
static void Main()
{
using (var stream = File.OpenWrite("sample.dat")) {
// 現在のstreamの長さを表示
Console.WriteLine(stream.Length);
// 書き込むデータが格納されているバイト配列
var buffer = new byte[8] {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
// bufferの8バイト分をstreamに書き込む
stream.Write(buffer, 0, 8);
Console.WriteLine(stream.Length);
// 現在の書き込み位置(8バイト目)をstreamの長さとして設定する
stream.SetLength(stream.Position);
Console.WriteLine(stream.Length);
}
}
}