[C#.NET] 使用 DotNetZip 處理壓縮檔案
續上篇 http://www.dotblogs.com.tw/yc421206/2012/04/30/71911
DotNetZip 也是蠻多人在使用的壓縮檔元件,官網也有相當多的範例,學起來相當的輕鬆
本篇章節
SDK 下載位置
https://dotnetzip.codeplex.com/releases/view/68268
解壓縮後把 zip-v1.9 裡的 Ionic.Zip.dll 加入參考
官方版工具
或是用 NuGet 取得 SDK
https://dotnetzip.codeplex.com/wikipage?title=Examples&referringTitle=Documentation
壓縮檔案到 Stream:
{ using (MemoryStream outputStream = new MemoryStream()) using (ZipFile zip = new ZipFile()) { zip.AddFile("ReadMe.txt"); zip.AddFile("7440-N49th.png"); zip.AddFile("2008_Annual_Report.pdf"); zip.Save(outputStream); } }解壓縮到 Stream:
{ using (ZipFile zips = ZipFile.Read("FileName")) using (MemoryStream outputStream = new MemoryStream()) { foreach (ZipEntry entity in zips) { entity.Extract(outputStream); } } }
當我用下列程式碼壓縮大檔案時會出現錯誤,錯誤訊息裡告訴我們要設定 UseZip64WhenSaving 屬性
{ zip.AddFile("1.iso"); zip.Save("1.zip"); }
例外訊息如下:
所以我再加上
參考來源:https://dotnetzip.codeplex.com/discussions/288073
壓縮完成,可以看到縮小了不少空間呀
在壓縮的時候耗掉很多 CPU 跟 IO 資源。
使用官方工具壓縮的時候也耗掉很多 CPU 跟 IO 資源。
7-Zip 也是耗掉蠻多資源,但大都保持在33~34%,不會再往上飄,IO 則是 1.3 MB/s
DotNetZip 會不斷的把暫存檔寫入 IO,所以可以看到暫存檔案會不斷的增加容量。
但 7-zip 暫存檔案是 0 KB,但它的確會損耗一些 IO,不能說完全沒有用到 IO,只是我不知道它暫存在什麼位置。
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2013/09/05/116408.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET