Почему мой GZipStream не доступен для записи? - PullRequest
1 голос
/ 17 ноября 2011

В моей программе есть сжатые ресурсы GZ, и я должен быть в состоянии записать их во временные файлы для использования.Я написал следующую функцию для записи файлов и возврата true в случае успеха или false в случае ошибки.Кроме того, я поместил здесь команду try / catch, которая показывает MessageBox в случае ошибки:

private static bool extractCompressedResource(byte[] resource, string path)
{
  try
  {
    using (MemoryStream ms = new MemoryStream(resource))
    {
      using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
      {
        using (GZipStream zs = new GZipStream(fs, CompressionMode.Decompress))
        {
          ms.CopyTo(zs); // Throws exception

          zs.Close();
          ms.Close();
        }
      }
    }
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message); // Stream is not writeable
    return false;
  }

  return true;
}

Я добавил комментарий к строке, которая выдает исключение.Если я поставлю точку останова на этой строке и загляну внутрь GZipStream, тогда я увижу, что она недоступна для записи (что и является причиной проблемы).

Я делаю что-то не так или этоограничение GZipStream класса?

1 Ответ

4 голосов
/ 17 ноября 2011

Вы прокладываете трубы неправильно. Исправлено:

using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
using (MemoryStream ms = new MemoryStream(resource))
using (GZipStream zs = new GZipStream(ms, CompressionMode.Decompress))
{
   zs.CopyTo(fs);
}
...