@daniil14056

Возврат значения из инструкции using с потерей данных и неточной записи?

Почему при выходе или возврате значения из под инструкции using происходит запись файла с потерями данных.
К примеру вот код архивации, в 1 случае все ок и к примеру сжатый архив 100кб и может быть восстановлен обратно, а во втором случае сжатый архив 80 и поврежден.
Почему так.

public MemoryStream GZipCompress(MemoryStream memoryStream)
        {
            var newStream = new MemoryStream((int)memoryStream.Length / 2); //set to estimate of compression ratio

            using (GZipStream compress = new GZipStream(newStream, CompressionMode.Compress,true))
            {
                memoryStream.CopyTo(compress);
            }  
// Вот так все отлично
            newStream.Position = 0;
            return newStream;
        }

Тут происходит потеря данных и данные будет не восстановить, возврат из под using
public MemoryStream GZipCompress(MemoryStream memoryStream)
        {
            var newStream = new MemoryStream((int)memoryStream.Length / 2); 

            using (GZipStream compress = new GZipStream(newStream, CompressionMode.Compress,true))
            {
                memoryStream.CopyTo(compress);

      // а вот так сжатие  ошибочное
                newStream.Position = 0;
                return newStream;
            }
        }
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
using разворачивается вот в такой блок.
var reader = new StringReader(manyLines);
    try {
        string? item;
        do {
            item = reader.ReadLine();
            Console.WriteLine(item);
        } while(item != null);
    } finally
    {
        reader?.Dispose();
    }


Так что во втором случае все уже разрушено. И возникает ошибка
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы