
Sharpziplib 提取 ZIP C#(开发人员如何使用)
在当今数字化环境中,数据管理至关重要,因此拥有高效的压缩和解压缩工具至关重要。 在.NET生态系统中,有一个脱颖而出的工具是SharpZipLib。 在本文中,我们将深入探讨SharpZipLib,探索它的功能、应用及如何将其集成到你的.NET项目中。
什么是 SharpZipLib?
SharpZipLib是一个功能丰富的开源压缩库,专为.NET编写,完全使用C#编写。 它提供对多种压缩格式的全面支持,包括ZIP、GZip和Tar。 由一个专注的社区开发,SharpZipLib提供了广泛的功能,以高效地压缩和解压缩文件。
功能和能力
- **支持多种压缩格式:**SharpZipLib支持流行的压缩格式,如ZIP、GZip和Tar,以满足多样化的用例和需求。
- **基于流的操作:**该库在流上操作,使开发人员能够处理来自各种来源的数据,包括文件、内存流或网络流。 这种灵活性促进了在应用程序不同部分中的无缝集成。
- **压缩等级:**开发人员可以根据具体需要微调压缩等级,以在压缩比和处理速度之间取得平衡。
- **密码保护:**SharpZipLib允许创建受密码保护的ZIP档案,通过用指定的密码加密内容来确保数据安全。
- **错误处理和恢复:**强大的错误处理机制使开发人员能够在压缩和解压缩操作期间优雅地处理异常。 此外,SharpZipLib支持从损坏的档案中恢复,提高了可靠性。
用例
- **文件压缩和归档:**SharpZipLib非常适合需要压缩和归档文件的应用程序,例如备份工具、文件管理工具或数据导出功能。
- **Web服务和API:**处理文件传输或数据交换的Web服务通常受益于压缩以减少带宽使用。 SharpZipLib可以无缝集成到此类服务中,以高效压缩传出数据或解压入站负载。
- **桌面应用程序:**处理大数据集或资源文件的桌面应用程序可以利用SharpZipLib来压缩文件以进行存储或分发。 这对于软件安装程序或数据同步工具尤为有用。
- **数据备份和存储:**需要周期性备份或以压缩格式存储数据的应用程序可以使用SharpZipLib自动执行备份过程,并有效地保存存储空间。
SharpZipLib的优点
- **开源:**作为一个开源库,SharpZipLib鼓励合作和社区贡献,确保了持续的改进和适应不断变化的需求。
- **跨平台兼容性:**SharpZipLib是用C#编写的,并以.NET框架为目标,支持与Windows、Linux和macOS等多种平台的兼容,增强了其多功能性。
- **轻量和高效:**SharpZipLib旨在轻量和高效,最大限度地减少资源消耗,同时提供高性能的压缩和解压缩能力。
- **广泛的文档和支持:**全面的文档和社区支持使开发人员更容易在使用SharpZipLib时集成和排查问题。
创建C# Visual Studio项目
-
打开Visual Studio并点击"创建一个新的项目"选项。 2.根据您的要求选择合适的项目模板(例如,控制台应用程序、Windows 窗体应用程序)。

3.指定项目名称和位置,然后单击 "下一步"。
点击"创建"以创建项目。
4.从 "附加信息 "中选择最新的 .NET Framework。 点击"创建"以创建项目。
要将SharpZipLib集成到你的.NET项目中:
-
在你的Visual Studio IDE C# ConsoleApp中,右键点击Solution Explorer中的项目并选择"管理NuGet包..."
-
在你的 Visual Studio IDE C# ConsoleApp中,在解决方案资源管理器中右键点击你的项目并选择"管理NuGet包..."


-
NuGet将自动下载并将必要的依赖项添加到你的项目中。 以下是演示如何使用SharpZipLib高效压缩和解压缩文件的简化示例:
代码示例
SharpZipLib长期以来一直是.NET语言开发社区的主力,为处理如ZIP、GZip、Tar和BZip2等压缩档案提供了基本功能。然而,随着技术的发展和开发者寻求更高级的解决方案,SharpZipLib的某些限制逐渐显现。
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
namespace SharpZipLibExample
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\SourceDirectory"; // Source directory containing files to compress
string zipFilePath = @"C:\OutputDirectory\compressed.zip"; // Output path for the compressed ZIP file
// Compress files from the source directory
CompressDirectory(sourceDirectory, zipFilePath);
Console.WriteLine("Files compressed successfully.");
string extractPath = @"C:\OutputDirectory\extracted"; // Path to extract the decompressed files
// Decompress files from the ZIP archive
Decompress(zipFilePath, extractPath);
Console.WriteLine("Files decompressed successfully.");
}
// Method to compress all files in a directory to a ZIP file
static void CompressDirectory(string sourceDirectory, string zipFilePath)
{
using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
{
zipOutputStream.SetLevel(5); // Set compression level (0-9), 5 as a mid-range
// Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);
zipOutputStream.Finish();
zipOutputStream.Close();
}
}
// Method to add files from a directory to a ZIP output stream
static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
{
// Get list of files in the directory
string[] files = Directory.GetFiles(sourceDirectory);
foreach (string file in files)
{
var entry = new ZipEntry(Path.GetFileName(file)); // Create a new entry for each file
zipOutputStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
// Buffer for reading files
byte[] buffer = new byte[4096];
int sourceBytes;
// Read file and write to ZIP stream
while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
zipOutputStream.Write(buffer, 0, sourceBytes);
}
}
}
// Handle subdirectories recursively
string[] subdirectories = Directory.GetDirectories(sourceDirectory);
foreach (string subdirectory in subdirectories)
{
AddDirectoryFilesToZip(subdirectory, zipOutputStream);
}
}
// Method to decompress files from a ZIP file
static void Decompress(string zipFilePath, string extractPath)
{
using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry entry;
// Read entries from the ZIP archive
while ((entry = zipInputStream.GetNextEntry()) != null)
{
string entryPath = Path.Combine(extractPath, entry.Name);
// Process files
if (entry.IsFile)
{
string directoryName = Path.GetDirectoryName(entryPath);
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
using (var fileStream = File.Create(entryPath))
{
// Buffer for reading entries
byte[] buffer = new byte[4096];
int bytesRead;
// Read from ZIP stream and write to file
while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
else if (entry.IsDirectory) // Process directories
{
Directory.CreateDirectory(entryPath);
}
}
}
}
}
}Imports ICSharpCode.SharpZipLib.Zip
Imports System
Imports System.IO
Namespace SharpZipLibExample
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim sourceDirectory As String = "C:\SourceDirectory" ' Source directory containing files to compress
Dim zipFilePath As String = "C:\OutputDirectory\compressed.zip" ' Output path for the compressed ZIP file
' Compress files from the source directory
CompressDirectory(sourceDirectory, zipFilePath)
Console.WriteLine("Files compressed successfully.")
Dim extractPath As String = "C:\OutputDirectory\extracted" ' Path to extract the decompressed files
' Decompress files from the ZIP archive
Decompress(zipFilePath, extractPath)
Console.WriteLine("Files decompressed successfully.")
End Sub
' Method to compress all files in a directory to a ZIP file
Private Shared Sub CompressDirectory(ByVal sourceDirectory As String, ByVal zipFilePath As String)
Using zipOutputStream As New ZipOutputStream(File.Create(zipFilePath))
zipOutputStream.SetLevel(5) ' Set compression level (0-9), 5 as a mid-range
' Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream)
zipOutputStream.Finish()
zipOutputStream.Close()
End Using
End Sub
' Method to add files from a directory to a ZIP output stream
Private Shared Sub AddDirectoryFilesToZip(ByVal sourceDirectory As String, ByVal zipOutputStream As ZipOutputStream)
' Get list of files in the directory
Dim files() As String = Directory.GetFiles(sourceDirectory)
For Each file As String In files
Dim entry = New ZipEntry(Path.GetFileName(file)) ' Create a new entry for each file
zipOutputStream.PutNextEntry(entry)
Using fileStream = System.IO.File.OpenRead(file)
' Buffer for reading files
Dim buffer(4095) As Byte
Dim sourceBytes As Integer
' Read file and write to ZIP stream
sourceBytes = fileStream.Read(buffer, 0, buffer.Length)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
Do While sourceBytes > 0
zipOutputStream.Write(buffer, 0, sourceBytes)
sourceBytes = fileStream.Read(buffer, 0, buffer.Length)
Loop
End Using
Next file
' Handle subdirectories recursively
Dim subdirectories() As String = Directory.GetDirectories(sourceDirectory)
For Each subdirectory As String In subdirectories
AddDirectoryFilesToZip(subdirectory, zipOutputStream)
Next subdirectory
End Sub
' Method to decompress files from a ZIP file
Private Shared Sub Decompress(ByVal zipFilePath As String, ByVal extractPath As String)
Using zipInputStream As New ZipInputStream(File.OpenRead(zipFilePath))
Dim entry As ZipEntry
' Read entries from the ZIP archive
entry = zipInputStream.GetNextEntry()
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((entry = zipInputStream.GetNextEntry()) != null)
Do While entry IsNot Nothing
Dim entryPath As String = Path.Combine(extractPath, entry.Name)
' Process files
If entry.IsFile Then
Dim directoryName As String = Path.GetDirectoryName(entryPath)
If Not Directory.Exists(directoryName) Then
Directory.CreateDirectory(directoryName)
End If
Using fileStream = File.Create(entryPath)
' Buffer for reading entries
Dim buffer(4095) As Byte
Dim bytesRead As Integer
' Read from ZIP stream and write to file
bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
Do While bytesRead > 0
fileStream.Write(buffer, 0, bytesRead)
bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)
Loop
End Using
ElseIf entry.IsDirectory Then ' Process directories
Directory.CreateDirectory(entryPath)
End If
entry = zipInputStream.GetNextEntry()
Loop
End Using
End Sub
End Class
End NamespaceSharpZipLib的限制
- 复杂性:SharpZipLib的API可能很繁琐和冗长,开发者需要编写冗长的代码来执行一些简单任务,如创建或提取ZIP档案。
1.复杂性: SharpZipLib 的 API 可能很繁琐冗长,需要开发人员编写冗长的代码来执行创建或提取 ZIP 归档等简单任务。 2.缺乏现代功能: SharpZipLib 缺乏对现代 .NET 功能和平台的支持,使其不太适合现代开发环境。 3.**文档有限:**虽然 SharpZipLib 已经存在很长时间了,但其文档通常很少且过时,这使得开发人员难以入门或解决问题。 4.性能: SharpZipLib 的性能可能并不总是能满足开发人员的期望,尤其是在处理大型或复杂的归档文件时。
IronZIP:弥补差距
IronZIP文档,由 Iron Software概述 开发,是一个现代且高效的解决方案,用于在.NET应用程序中管理ZIP档案。 IronZIP提供了可定制的压缩级别和密码保护等高级功能,确保灵活性和数据安全。 与最新的.NET版本兼容并进行性能优化,IronZIP简化了档案管理任务,使其轻松高效。 与最新的.NET版本兼容并经过性能优化的IronZIP轻松高效地简化了归档管理任务。

IronZIP特点 作为一种强大且现代的解决方案,解决了SharpZipLib的不足之处。 1. 高级API:IronZIP提供了一个直观且对开发者友好的API,简化了档案管理任务。
1.高级 API: IronZIP 提供直观且对开发者友好的 API,简化归档管理任务。 2. 全面.NET支持:IronZIP完全支持最新的.NET版本,包括.NET Core、.NET Standard和.NET Framework,确保与现代开发环境和平台的兼容性。 2.完全支持 .NET: IronZIP 完全支持最新的 .NET 版本,包括 .NET Core、.NET Standard 和 .NET Framework,确保与现代开发环境和平台兼容。 3.全面的文档: IronZIP 附带全面的文档和示例,使开发人员能够快速掌握其特性和功能。 4. 压缩等级控制:IronZIP为开发者提供了对压缩等级的控制,使他们可以根据需求调整压缩级别。 4.压缩级别控制: IronZIP 为开发者提供了对压缩级别的控制,允许他们根据自身需求调整压缩级别。 此功能使开发人员能够在文件大小减少和压缩速度之间取得平衡。 5.密码保护: IronZIP 支持对 ZIP 压缩文件进行密码保护,从而增强敏感数据的安全性。 6. 性能优化:IronZIP的性能得到优化,提供了比SharpZipLib更快的压缩和提取速度。 6.性能优化: IronZIP 针对性能进行了优化,与 SharpZipLib 相比,可提供更快的压缩和提取速度。 探索IronZIP文档以获取更多关于如何开始使用IronZIP的信息。IronZIP示例代码帮助你轻松开始。
查看IronZIP文档以获取有关如何开始使用IronZIP的更多信息。IronZIP代码示例帮助您轻松开始。
以下是将XDocument与IronPDF集成的步骤:
-
打开Visual Studio IDE或你的首选IDE。
-
打开Visual Studio IDE或你偏好的IDE。
-
运行以下命令以安装IronZIP包:
-
或者,你可以从解决方案的NuGet包管理器中安装它。
-
从NuGet浏览选项卡中选择IronZIP并点击安装:


代码示例
以下源代码展示了如何使用IronZIP高效地创建ZIP文件,只需几行代码即可轻松完成。 在这里,您可以通过提供指定文件夹中的文件名,将多个文件添加到受密码保护的ZIP档案。 在创建IronZipArchive对象时,您还可以指定压缩级别以减少输出文件的空间大小。
using IronZip;
using IronZip.Enum;
class Program
{
static void Main()
{
// Create an empty ZIP with the highest compression
using (var archive = new IronZipArchive(9))
{
// Password protect the ZIP (Support AES128 & AES256)
archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional);
archive.AddArchiveEntry("./assets/file1.txt");
archive.AddArchiveEntry("./assets/file2.txt");
// Export the ZIP
archive.SaveAs("output.zip");
}
}
}Imports IronZip
Imports IronZip.Enum
Friend Class Program
Shared Sub Main()
' Create an empty ZIP with the highest compression
Using archive = New IronZipArchive(9)
' Password protect the ZIP (Support AES128 & AES256)
archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional)
archive.AddArchiveEntry("./assets/file1.txt")
archive.AddArchiveEntry("./assets/file2.txt")
' Export the ZIP
archive.SaveAs("output.zip")
End Using
End Sub
End Class输出ZIP文件

结论
SharpZipLib概述作为一个强大的.NET压缩库,提供了丰富的功能和能力,以高效处理压缩文件。 无论是用于存储的数据压缩、文件归档,还是优化Web服务中的带宽使用,SharpZipLib都提供了必要的工具,以简化压缩和解压缩操作。 虽然SharpZipLib一直是.NET应用中处理压缩档案的可靠选择,但在当今开发环境中,其局限性越来越明显。
探索IronZIP API填补了SharpZipLib留下的空白,提供了一个现代化且功能丰富的替代方案,优先考虑易用性、性能和兼容性。 探索IronZIP API填补SharpZipLib留下的空白,提供一种现代和功能丰富的替代方案,优先考虑易用性、性能和兼容性。 IronZIP提供免费试用许可概览。
从IronZIP下载下载库并尝试一下。 从 IronZIP Downloads 下载该库并试用。

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。
相关文章


