Вокруг этого бита происходит что-то странное:
buffer.ToList().CopyTo(0, data, 0, read);
bytesRead = stream.Read(buffer, 0, CHUNK_SIZE);
if (bytesRead > 0) {
fileStream.Write(buffer, 0, bytesRead);
}
Я ожидаю, что вы запишете только что прочитанные байты в fileStream
- т.е. fileStream.Write(buffer, 0, read)
самостоятельно.Однако вы копируете буфер в массив data
(который больше никогда не используется), затем читаете из потока снова в buffer
(на этот раз синхронно) и записываете , что ,
Итак, вы выбрасываете половину загруженных байтов.Неудивительно, что из 427724800 считывается только около 213864187 байт!
Кроме того, используйте using
блок для вашего fileStream
, а не явный вызов .Dispose()
.Кроме того, если вы копируете один массив в другой, используйте Array.Copy
вместо array.ToList().CopyTo(...)
.