ストリームの長さを変更したい場合は、SetLengthメソッドを呼び出します。 SetLengthメソッドで現在のStreamの長さよりも短くする場合、その内容は切り捨てられます。 同時に、ストリームの書き込み・読み込み位置はストリームの終端に移動します。 逆に現在のStreamの長さよりも長くする場合、拡張した部分の内容は定義されません。 ストリームの読み込み・書き込み位置は変わりません。
SetLengthメソッドを使ってStreamの長さを変更する
using System;
using System.IO;
class Sample {
static void Main()
{
using (var stream = File.OpenWrite("sample.dat")) {
// 書き込むデータが格納されているバイト配列
var buffer = new byte[8] {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
// bufferの8バイト分をstreamに書き込む
stream.Write(buffer, 0, 8);
// streamの長さを4バイトにする
stream.SetLength(4);
}
}
}
Positionプロパティとは異なりLengthプロパティは読み取り専用なので、このプロパティに値を設定してストリームの長さを変更することは出来ません。
長さが変更できないストリームに対してSetLengthを呼び出そうとした場合には、例外NotSupportedExceptionがスローされます。 例えば、NetworkStreamや標準入出力のストリーム、固定長に設定されたMemoryStreamなどは長さが変更できないストリームです。