ストリームの長さを変更したい場合は、SetLengthメソッドを呼び出します。 SetLengthメソッドで現在のStreamの長さよりも短くする場合、その内容は切り捨てられます。 同時に、ストリームの書き込み・読み込み位置はストリームの終端に移動します。 逆に現在のStreamの長さよりも長くする場合、拡張した部分の内容は定義されません。 ストリームの読み込み・書き込み位置は変わりません。

SetLengthメソッドを使ってStreamの長さを変更する
using System;
using System.IO;

class Sample {
  static void Main()
  {
    using (Stream stream = File.OpenWrite("sample.dat")) {
      // 書き込むデータが格納されているバイト配列
      byte[] 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などは長さが変更できないストリームです。