1

プログラムにGZ圧縮されたリソースがいくつかあり、それらを一時ファイルに書き込んで使用できるようにする必要があります。次の関数を作成して、ファイルを書き出し、true成功またはfalse失敗したときに戻ります。MessageBoxさらに、エラーが発生した場合にを表示するtry/catchをそこに配置しました。

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クラスの制限ですか?

4

1 に答える 1

5

パイプを間違った方法で配管しています。修理:

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);
}
于 2011-11-17T01:52:33.777 に答える