C# - ZIP 壓縮流
參考資料
- https://docs.microsoft.com/en-us/dotnet/api/system.io.compression.ziparchive?view=netframework-4.8
- https://zh.wikipedia.org/wiki/ZIP格式
Overview
ZIP流是在NetFramework4.5 引入的目的是為了能夠更好的操作ZIP文件,進行壓縮解壓等操作。與ZIP流相關的幾個類是:
- ZipArchive 代表一個ZIP的壓縮包文件
- ZipArchiveEntry 代表ZIP壓縮包中的一個文件
- ZipFile 提供了一系列的靜態方法來幫助用戶更方便地操作ZIP文件,類似於File類的作用。
PS: 在使用之前請先添加程序集引用System.IO.Compression
與System.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 提供了一些更簡便的方法,具體可以查看官方文檔