在 .NET Framework 的時候有好用的 DotNetZip 可以快速壓縮&解壓縮檔案
但在寫 .NET Core 的時候發現這個套件不能使用,那只好默默地自己寫了
這邊就用 System.IO.Compression 提供的 ZipArchive 來簡單寫個壓縮 & 解壓縮範例
壓縮檔案:
string rootPath = AppDomain.CurrentDomain.BaseDirectory;
string saveFileName = Path.Combine(rootPath, "test.zip");
string zipFileName = Path.Combine(rootPath, "123.txt");
using (var fs = new FileStream(saveFileName, FileMode.OpenOrCreate))
{
using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Create))
{
string fileName = Path.GetFileName(zipFileName);
var zipArchiveEntry = zipArchive.CreateEntry(fileName);
using (var zipStream = zipArchiveEntry.Open())
{
byte[] bytes = File.ReadAllBytes(zipFileName);
zipStream.Write(bytes, 0, bytes.Length);
}
}
}
解壓縮檔案:
string rootPath = AppDomain.CurrentDomain.BaseDirectory;
string zipFileName = Path.Combine(rootPath, "test.zip");
string saveFolder = rootPath;
using (var fs = new FileStream(zipFileName, FileMode.Open))
{
using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Read))
{
foreach (ZipArchiveEntry zipArchiveEntry in zipArchive.Entries)
{
string temp = Path.Combine(saveFolder, zipArchiveEntry.FullName);
zipArchiveEntry.ExtractToFile(temp);
}
}
}
解壓縮的時候最好可以將 zipArchiveEntry.FullName 再做一層處理,避免產生資安問題 (詳情)