Метод CopyTo
Stream.CopyTo(destination)
читает от текущей Position до
конца и пишет в destination.
Перед вызовом позицию задают через
Seek.
FileStream и MemoryStream
ведут себя одинаково по контракту
Stream.
Есть CopyToAsync.
Синтаксис
stream.CopyTo(destination);
stream.CopyTo(destination, bufferSize);
Пример
Давайте скопируем все пять байт в новый
MemoryStream:
using System;
using System.IO;
class Program
{
static void Main()
{
using var src = new MemoryStream();
src.Write([1, 2, 3, 4, 5], 0, 5);
src.Position = 0;
using var dst = new MemoryStream();
src.CopyTo(dst);
long res = dst.Length;
Console.WriteLine(res);
}
}
Результат выполнения кода:
5
Пример
Давайте копировать только с середины - сначала сдвинем позицию:
using System;
using System.IO;
class Program
{
static void Main()
{
using var src = new MemoryStream();
src.Write([1, 2, 3, 4, 5], 0, 5);
src.Seek(2, SeekOrigin.Begin);
using var dst = new MemoryStream();
src.CopyTo(dst);
long res = dst.Length;
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте проверим первый байт в приёмнике:
using System;
using System.IO;
class Program
{
static void Main()
{
using var src = new MemoryStream();
src.Write([1, 2, 3, 4, 5], 0, 5);
src.Position = 0;
using var dst = new MemoryStream();
src.CopyTo(dst);
dst.Position = 0;
byte[] buf = new byte[1];
dst.Read(buf, 0, 1);
int res = buf[0];
Console.WriteLine(res);
}
}
Результат выполнения кода:
1