Вы не должны использовать StreamReader
для двоичных файлов (например, gif или jpg). StreamReader
для данных text . Вы почти , конечно, теряете данные, если используете их для произвольных двоичных данных. (Если вы используете Encoding.GetEncoding (28591), вы, вероятно, будете в порядке, но в чем смысл?)
Зачем вам вообще нужно использовать StreamReader
? Почему бы просто не сохранить двоичные данные в качестве двоичных данных и записать их на диск (или SQL) в виде двоичных данных?
EDIT: поскольку это, кажется, то, что люди хотят видеть ... если вы do просто хотите скопировать один поток в другой (например, в файл), используйте что-то вроде этого:
///
/// Copies the contents of input to output. Doesn't close either stream.
///
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
Чтобы использовать его для сброса потока в файл, например:
using (Stream file = File.Create(filename))
{
CopyStream(input, file);
}
Обратите внимание, что Stream.CopyTo
был введен в .NET 4, служащий в основном той же цели.