我的程序中有一些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
类的限制?
答案 0 :(得分:4)
你正在以错误的方式管道。修正:
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);
}