1. SharpZipLib
功能:
- 支持ZIP和GZip格式的压缩和解压缩。
- 提供了对Tar和BZip2格式的支持。
- 轻量级,易于使用。
优点:
- 开源,广泛使用。
- 灵活性较高,适用于多种压缩需求。
使用实例:
using System; using ICSharpCode.SharpZipLib.Zip; class Program { static void Main() { string sourceFolder = @"C:\Path\To\Your\Folder"; string zipFile = @"C:\Path\To\Your\Archive.zip"; ZipDirectory(sourceFolder, zipFile); Console.WriteLine("Compression completed."); string extractFolder = @"C:\Path\To\Your\Extracted"; UnzipFile(zipFile, extractFolder); Console.WriteLine("Extraction completed."); } static void ZipDirectory(string sourceFolder, string zipFile) { using (ZipOutputStream zipStream = new ZipOutputStream(System.IO.File.Create(zipFile))) { zipStream.SetLevel(9); // 0 - store only to 9 - means best compression ZipFolder(sourceFolder, sourceFolder, zipStream); zipStream.Finish(); zipStream.Close(); } } static void ZipFolder(string rootFolder, string currentFolder, ZipOutputStream zipStream) { string[] files = System.IO.Directory.GetFiles(currentFolder); foreach (string file in files) { ZipFile(zipStream, currentFolder, file); } string[] subFolders = System.IO.Directory.GetDirectories(currentFolder); foreach (string folder in subFolders) { ZipFolder(rootFolder, folder, zipStream); } } static void ZipFile(ZipOutputStream zipStream, string rootFolder, string filePath) { byte[] buffer = new byte[4096]; string relativePath = filePath.Substring(rootFolder.Length + 1); ZipEntry entry = new ZipEntry(relativePath); zipStream.PutNextEntry(entry); using (System.IO.FileStream fs = System.IO.File.OpenRead(filePath)) { int sourceBytes; do { sourceBytes = fs.Read(buffer, 0, buffer.Length); zipStream.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } static void UnzipFile(string zipFile, string extractFolder) { using (ZipInputStream zipStream = new ZipInputStream(System.IO.File.OpenRead(zipFile))) { ZipEntry entry; while ((entry = zipStream.GetNextEntry()) != null) { string entryName = entry.Name; string fullZipToPath = System.IO.Path.Combine(extractFolder, entryName); string directoryName = System.IO.Path.GetDirectoryName(fullZipToPath); if (directoryName.Length > 0) { System.IO.Directory.CreateDirectory(directoryName); } if (entry.IsFile) { byte[] buffer = new byte[4096]; using (System.IO.FileStream streamWriter = System.IO.File.Create(fullZipToPath)) { int sourceBytes; do { sourceBytes = zipStream.Read(buffer, 0, buffer.Length); streamWriter.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } } } } }
2. DotNetZip
功能:
- 支持ZIP格式的压缩和解压缩。
- 提供了对多卷和自解压缩ZIP文件的支持。
- 具有更简单的API,易于使用。
优点:
- 使用方便,简洁明了。
- 集成度高,适合快速实现文件压缩解压缩功能。
使用实例:
using System; using Ionic.Zip; class Program { static void Main() { string sourceFolder = @"C:\Path\To\Your\Folder"; string zipFile = @"C:\Path\To\Your\Archive.zip"; ZipDirectory(sourceFolder, zipFile); Console.WriteLine("Compression completed."); string extractFolder = @"C:\Path\To\Your\Extracted"; UnzipFile(zipFile, extractFolder); Console.WriteLine("Extraction completed."); } static void ZipDirectory(string sourceFolder, string zipFile) { using (ZipFile zip = new ZipFile()) { zip.AddDirectory(sourceFolder); zip.Save(zipFile); } } static void UnzipFile(string zipFile, string extractFolder) { using (ZipFile zip = ZipFile.Read(zipFile)) { zip.ExtractAll(extractFolder, ExtractExistingFileAction.OverwriteSilently); } } }
以上两个例子都提供了基本的目录压缩和解压缩功能,你可以根据具体需求进行进一步定制。确保在实际项目中进行充分的测试和适当的错误处理。
原文地址:https://www.toutiao.com/article/7304543693615497791/