ストリームの内容を別のストリームにコピーするには、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メソッドではコピーする長さを指定することはできず、常にストリームの終端までがコピーされます。