1、通過 System.IO.Compression 命名空間中新增的ZipArchive、ZipFile等類實現。
不需要安裝第三方的組件包,微軟官方的實現,推薦使用
//壓縮
System.IO.Compression.ZipFile.CreateFromDirectory(@"C:\Users\Pride\Pictures\test\123", @"C:\Users\Pride\Pictures\test\123.zip");
//解壓
System.IO.Compression.ZipFile.ExtractToDirectory(@"C:\Users\Pride\Pictures\test\123.zip", @"C:\Users\Pride\Pictures\test\1234");
2、第三方類庫(DotNetZip的使用)
? SharpZipLib[1]
? DotNetZip[2]
DotNetZip的簡單使用
壓縮文件
using (ZipFile zip = new ZipFile())
{
zip.AddFile("c:\\photos\\personal\\7440-N49th.png");
zip.AddFile("c:\\Desktop\\2005_Annual_Report.pdf");
zip.AddFile("ReadMe.txt");
zip.Save("Archive.zip");
}
更新文件,無需解壓
using (ZipFile zip = ZipFile.Read("ExistingArchive.zip"))
{
// 1. remove an entry, given the name
zip.RemoveEntry("README.txt");
// 2. Update an existing entry, with content from the filesystem
zip.UpdateItem("Portfolio.doc");
// 3. modify the filename of an existing entry
// (rename it and move it to a sub directory)
ZipEntry e = zip["Table1.jpg"];
e.FileName ="images/Figure1.jpg";
// 4. insert or modify the comment on the zip archive
zip.Comment ="This zip archive was updated" + System.DateTime.ToString("G");
// 5. finally, save the modified archive
zip.Save();
}
提取文件
using (ZipFile zip = ZipFile.Read("ExistingZipFile.zip"))
{
foreach (ZipEntry e in zip)
{
e.Extract(TargetDirectory, true); // true => overwrite existing files
}
}
3、原生 System.IO.Compression 實現 zip 的壓縮與解壓
不需要安裝第三方的組件包,微軟官方的實現,需要添加命名空間using System.IO.Compression;
將指定目錄壓縮為Zip文件
/// <summary>
/// 將指定目錄壓縮為Zip文件
/// </summary>
/// <param name="folderPath">文件夾地址 D:/1/ </param>
/// <param name="zipPath">zip地址 D:/1.zip </param>
public static void CompressDirectoryZip(string folderPath, string zipPath)
{
DirectoryInfo directoryInfo = new(zipPath);
if (directoryInfo.Parent != null)
{
directoryInfo = directoryInfo.Parent;
}
if (!directoryInfo.Exists)
{
directoryInfo.Create();
}
ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Optimal, false);
}
將指定文件壓縮為Zip文件
/// <summary>
/// 將指定文件壓縮為Zip文件
/// </summary>
/// <param name="filePath">文件地址 D:/1.txt </param>
/// <param name="zipPath">zip地址 D:/1.zip </param>
public static void CompressFileZip(string filePath, string zipPath)
{
FileInfo fileInfo = new FileInfo(filePath);
string dirPath = fileInfo.DirectoryName?.Replace("\\", "/") + "/";
string tempPath = dirPath + Guid.NewGuid() + "_temp/";
if (!Directory.Exists(tempPath))
{
Directory.CreateDirectory(tempPath);
}
fileInfo.CopyTo(tempPath + fileInfo.Name);
CompressDirectoryZip(tempPath, zipPath);
DirectoryInfo directory = new(path);
if (directory.Exists)
{
//將文件夾屬性設置為普通,如:只讀文件夾設置為普通
directory.Attributes = FileAttributes.Normal;
directory.Delete(true);
}
}
解壓Zip文件到指定目錄(壓縮單個文件的邏輯其實就是先將我們要壓縮的文件復制到一個臨時目錄,然后對臨時目錄執行了壓縮動作,壓縮完成之后又刪除了臨時目錄)
/// <summary>
/// 解壓Zip文件到指定目錄
/// </summary>
/// <param name="zipPath">zip地址 D:/1.zip</param>
/// <param name="folderPath">文件夾地址 D:/1/</param>
public static void DecompressZip(string zipPath, string folderPath)
{
DirectoryInfo directoryInfo = new(folderPath);
if (!directoryInfo.Exists)
{
directoryInfo.Create();
}
ZipFile.ExtractToDirectory(zipPath, folderPath);
}
復制
資料參考
? C# 壓縮或解壓_WenyueQ°的博客-CSDN博客_c# 解壓[3]
? .NET中zip的壓縮和解壓 - Asharp - 博客園[4]
? 使用C#和System.IO.Packaging以編程方式從Zip存檔中提取文件 | 碼農家園[5]
? C# 使用原生 System.IO.Compression 實現 zip 的壓縮與解壓_大哥手下留情的博客-CSDN博客[6]
引用鏈接
[1]
SharpZipLib: http://www.icsharpcode.net/opensource/sharpziplib/
[2]
DotNetZip: http://dotnetzip.codeplex.com/
[3]
C# 壓縮或解壓_WenyueQ°的博客-CSDN博客_c# 解壓: https://blog.csdn.net/u014325666/article/details/126298552
[4]
.NET中zip的壓縮和解壓 - Asharp - 博客園: https://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html
[5]
使用C#和System.IO.Packaging以編程方式從Zip存檔中提取文件 | 碼農家園: https://www.codenong.com/507751/
[6]
C# 使用原生 System.IO.Compression 實現 zip 的壓縮與解壓_大哥手下留情的博客-CSDN博客: https://blog.csdn.net/dageliuqing/article/details/127177937
該文章在 2025/6/3 15:22:34 編輯過