ストリームの内容を別のストリームにコピーするには、CopyToメソッドを使うことができます。 あるストリームの内容をコピーしてメモリ上(MemoryStream)に保持したり、ファイル(FileStream)に書き出したりしたい場合などに使えます。

CopyToメソッドを使ってStreamの内容を別のStreamにコピーする
using System;
using System.IO;

class Sample {
  static void Main()
  {
    using (var fromStream = File.OpenRead("sample.dat")) {
      using (var toStream = new MemoryStream()) {
        // ファイルの内容をMemoryStreamにコピー
        fromStream.CopyTo(toStream);

        // コピーした内容をバイト配列に変換して表示
        Console.WriteLine(BitConverter.ToString(toStream.ToArray()));
      }
    }
  }
}

CopyToメソッドでは、コピー元のStreamからReadしたものをコピー先のStreamにWriteします。 この際、コピー元・コピー先ともに現在位置からのコピーが行われます。 つまり現在位置がストリームの先頭でない場合、ストリームの途中からコピーが行われます。 コピー開始時にストリームの先頭へシークされることはありません。 また、CopyToメソッドではコピーする長さを指定することはできず、常にストリームの終端までがコピーされます。