關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

使用 SharpZipLib 發生解壓時,壓縮檔毀損問題

上次有寫了一篇關於使用SharpZipLib的文章 Streaming a zip file over http in .net with SharpZipLib 

結果在客戶端實際使用時,當客戶下載zip檔案後,

使用Windows內建的compressed (zipped) Folders開啟解壓縮時,發現匯出現下方錯誤訊息!

擷取

 

在Google上搜尋了一下,查出發生的原因為,預設SharpZipLib使用的是Zip64格式

而Windows內建的compressed (zipped) Folders是不支援此格式的。

因此解決方法需要強制指定壓縮時,不使用Zip64格式。即可解決此問題。

加入程式碼:

zipOutput.UseZip64 = UseZip64.Off;

該段程式修改後如下:

byte[] buffer = new byte[1024 * 8];
using (ZipOutputStream zipOutput = new ZipOutputStream(stream))
{
  zipOutput.UseZip64 = UseZip64.Off;  //強制指定不使用Zip64格式壓縮,避免windows內建zip無法開啟
  foreach (string fileName in fileNames)
  {
    ZipEntry zipEntry = new ZipEntry(fileName.Substring(fileName.LastIndexOf('\\') + 1));
    zipOutput.PutNextEntry(zipEntry);
    using (FileStream fread = File.OpenRead(fileName))
    {
      StreamUtils.Copy(fread, zipOutput, buffer);
    }
  }
  zipOutput.Finish();
}

即可解決此問題了!!

沒有留言:

張貼留言