Параметры:
- Используйте
data.Seek
, как предложено ken2k
Используйте несколько более простое Position
свойство:
data.Position = 0;
Используйте вызов ToArray
в MemoryStream
, чтобы начать свою жизнь проще:
byte[] buf = data.ToArray();
Третий вариант будет моим предпочтительным подходом.
Обратите внимание, что у вас должен быть оператор using
для автоматического закрытия потока файлов (и, необязательно, для MemoryStream
), и я бы добавил директиву using для System.IO
, чтобы сделать ваш код чище:
byte[] buf;
using (MemoryStream data = new MemoryStream())
{
using (Stream file = TestStream())
{
file.CopyTo(data);
buf = data.ToArray();
}
}
// Use buf
Возможно, вы захотите создать метод расширения для Stream
, чтобы сделать это для вас в одном месте, например,
public static byte[] CopyToArray(this Stream input)
{
using (MemoryStream memoryStream = new MemoryStream())
{
input.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}
Обратите внимание, что не закрывает входной поток.