@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;
            }
        }
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
using разворачивается вот в такой блок.
var reader = new StringReader(manyLines);
    try {
        string? item;
        do {
            item = reader.ReadLine();
            Console.WriteLine(item);
        } while(item != null);
    } finally
    {
        reader?.Dispose();
    }


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

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

Войти через центр авторизации
Похожие вопросы
ЭЛКОМ+ Москва
от 70 000 до 165 000 ₽
от 3 500 до 4 000 $
Группа ЧТПЗ Челябинск
от 90 000 до 140 000 ₽
25 янв. 2021, в 13:34
3000 руб./за проект
25 янв. 2021, в 13:09
3001 руб./за проект
25 янв. 2021, в 13:08
2000 руб./за проект