Я могу скачать байты [] и записать их в файл без проблем, большая ссылка, эта ссылка делает . Но когда я делаю простое изменение, сохраняя байты [] и readCount в список, а затем перенаправляя его по списку, я получаю поврежденный файл.
Ниже приведен частичный код, который показывает, что я имею в виду. Есть два прокомментированных пути: один хранит байты / счетчики (и порядок), а затем записывает, когда чтение завершено. Другой пишет в соответствии с каждым прочитанным.
Из-за поля порядка я убедился, что foreach записывает байты в правильном порядке, но в листинге частичного кода он явно не используется.
private class ByteHolder
{
public byte[] Buffer { get; set; } = new byte[8192];
public int BytesRead { get; set; }
public int Order { get; set; }
}
var byteList = new List<ByteHolder>();
using (var fileStream = new FileStream(_fileBytes.SavingPath.RuntimePath(), FileMode.Create, FileAccess.Write, FileShare.None, 8192, true))
{
do
{
var bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
//--- WRITING THE bytes and counts this way produces corrupt file -->
var offset = 0;
foreach (var byteHolder in byteList)
{
await fileStream.WriteAsync(byteHolder.Buffer, offset, byteHolder.BytesRead).ConfigureAwait(false);
offset += 8192;
}
isMoreToRead = false;
FileDownloadComplete?.Invoke(this, _fileBytes);
continue;
}
//--- Storing them in this class and list for writing above DOES NOT WORK -->
byteList.Add(new ByteHolder() { Buffer = buffer, BytesRead = bytesRead, Order = readCount });
//--- Writing inline with the read WORKS -->
//await fileStream.WriteAsync(buffer, 0, bytesRead);
readCount++;
totalBytesRead += bytesRead;