Вы не должны использовать StreamReader и StreamWriter для вещей, которые не являются текстовыми.Когда вы их используете, применяется кодировка.Кодирование не очень хорошо сочетается с произвольными двоичными данными, как засвидетельствует этот блог .
Вместо этого следует использовать простое FileStream
:
using (var output = File.OpenWrite(localFileName))
{
using (var responseStream = response.GetResponseStream())
{
await responseStream.CopyToAsync(output);
}
}
К сожалениюэто может быть не единственной проблемой, поскольку сжатие GZip (если его использует сервер) также может создавать проблемы.Вы можете объяснить это простым изменением настроек:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(remoteFileOrUri));
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
using (var output = File.OpenWrite(localFileName))
{
using (var responseStream = response.GetResponseStream())
{
await responseStream.CopyToAsync(output);
}
}