C# - ZIP 壓縮流


C# - ZIP 壓縮流

參考資料

Overview

ZIP流是在NetFramework4.5 引入的目的是為了能夠更好的操作ZIP文件,進行壓縮解壓等操作。與ZIP流相關的幾個類是:

  1. ZipArchive 代表一個ZIP的壓縮包文件
  2. ZipArchiveEntry 代表ZIP壓縮包中的一個文件
  3. ZipFile 提供了一系列的靜態方法來幫助用戶更方便地操作ZIP文件,類似於File類的作用。

PS: 在使用之前請先添加程序集引用System.IO.CompressionSystem.IO.Compression.FileStream

ZipArchive常見操作

創建一個ZIP文件

using (FileStream fs = new FileStream("myZip.zip", FileMode.Create))
{
    //打開壓縮包
    using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Create))
    {
        //創建一個條目
        ZipArchiveEntry entry = zipArchive.CreateEntry("HelloWorld.txt");
        //在條目中寫入內容
        using (StreamWriter writer = new StreamWriter(entry.Open(), Encoding.Default))
        {
            writer.Write("I am 魯迅認識的那只猹! Hello World");
        }
    }
}

向現有的ZIP壓縮包中添加文件

using (FileStream fs = new FileStream("myZip.zip", FileMode.Open))
{
    //打開壓縮包,Mode 為Update模式
    using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Update))
    {
        //創建一個條目
        ZipArchiveEntry entry = zipArchive.CreateEntry("AppendFile.txt");
        //在條目中寫入內容
        using (StreamWriter writer = new StreamWriter(entry.Open(), Encoding.Default))
        {
            writer.Write("這是追加的內容!");
        }
    }
}

解壓ZIP壓縮包

using (FileStream fs = new FileStream("myZip.zip", FileMode.Open))
{
    //打開壓縮包,Mode 為Update模式
    using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Update))
    {
        //創建一個用來存放解壓后的文件的目錄
        Directory.CreateDirectory("myZip");
        //將所有的條目解壓出來
        foreach (var item in zipArchive.Entries)
        {
            //解壓文件
            item.ExtractToFile(@"myZip\" + item.Name);
        }
    }
}

ZipFile

方法 解釋
FileZip.CreateFromDirectory 從一個目錄創建ZIP壓縮文件
FileZip.ExtractToDirectory 將ZIP壓縮文件解壓到目錄中
FileZip.Open 打開一個ZIP壓縮文件
FileZip.OpenRead 打開一個讀取模式的ZIP壓縮文件

ZipFileExtensions

ZipFileExtensions 為ZipArchive 和 ZipArchiveEntry 提供了一些更簡便的方法,具體可以查看官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM