プログラムに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
クラスの制限ですか?