[C#.NET] 使用 DotNetZip 處理壓縮檔案

[C#.NET] 使用 DotNetZip 處理壓縮檔案

續上篇 http://www.dotblogs.com.tw/yc421206/2012/04/30/71911

DotNetZip 也是蠻多人在使用的壓縮檔元件,官網也有相當多的範例,學起來相當的輕鬆

 

本篇章節

下載及解壓縮

範例

壓縮大檔案

Issue


下載及解壓縮

SDK 下載位置

https://dotnetzip.codeplex.com/releases/view/68268

解壓縮後把 zip-v1.9 裡的 Ionic.Zip.dll 加入參考

SNAGHTML49e35c0

 

官方版工具

SNAGHTML4f764af

 

 

或是用 NuGet 取得 SDK

SNAGHTML7b6adb3

範例

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");
}

例外訊息如下:

image

 

所以我再加上

   

參考來源:https://dotnetzip.codeplex.com/discussions/288073

壓縮完成,可以看到縮小了不少空間呀

SNAGHTML4e0f229

 

 

 

 

Issue

在壓縮的時候耗掉很多 CPU 跟 IO 資源。

SNAGHTML4dfaa19

 

使用官方工具壓縮的時候也耗掉很多 CPU 跟 IO 資源。

SNAGHTML4e2a0e3

 

 

7-Zip 也是耗掉蠻多資源,但大都保持在33~34%,不會再往上飄,IO 則是 1.3 MB/s

SNAGHTML4f64593

 

DotNetZip 會不斷的把暫存檔寫入 IO,所以可以看到暫存檔案會不斷的增加容量。

image

 

但 7-zip 暫存檔案是 0 KB,但它的確會損耗一些 IO,不能說完全沒有用到 IO,只是我不知道它暫存在什麼位置。

image


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2013/09/05/116408.aspx

 

 

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo