我的程序中有一些GZ壓縮資源,我需要能夠將它們寫出到臨時文件以供使用。我編寫了下列函數來寫出文件,併成功返回true
或失敗時返回false
。另外,我已經把一個try/catch在那裏它顯示了一個MessageBox
在一個錯誤的事件:爲什麼我的GZipStream不可寫入?
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
類的限制嗎?
無需關閉流在一個「使用」塊,它們將自動當它們被佈置 – musefan
也關閉,作爲書面,GZipStream將GZipStream設置當處置的FileStream的。對於OP也是如此:在處理之前,您沒有在示例中明確調用.Flush在您的示例中的'zs'和'fs',我們發現了一些問題。 – Joe