在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在数据管理至关重要的当今数字领域,拥有高效的压缩和解压缩工具至关重要。在 .NET 生态系统中脱颖而出的一款工具是 SharpZipLib.在本文中,我们将深入研究 SharpZipLib,探索其功能、应用以及如何将其集成到您的 .NET 项目中。
SharpZipLib 是一个功能丰富、开源的 .NET 压缩库,完全用 C# 编写。它全面支持各种压缩格式,包括 ZIP、GZip 和 Tar。SharpZipLib 由一个专门的社区开发,为高效压缩和解压文件提供了广泛的功能。
支持多种压缩格式: SharpZipLib 支持 ZIP、GZip 和 Tar 等流行的压缩格式,可满足不同的使用情况和要求。
基于流的操作: 该库基于流进行操作,使开发人员能够处理各种来源的数据,包括文件、内存流或网络流。这种灵活性有利于无缝集成到应用程序的不同部分。
压缩级别: 开发人员可以根据自己的具体需求,微调压缩级别,在压缩率和处理速度之间取得平衡。
密码保护: SharpZipLib 允许创建受密码保护的 ZIP 压缩包,通过使用指定密码对内容进行加密,确保数据安全。
文件压缩和归档: SharpZipLib 是需要压缩和归档文件的应用程序的理想选择,例如备份工具、文件管理工具或数据导出功能。
网络服务和 API: 处理文件传输或数据交换的网络服务经常受益于压缩,以减少带宽的使用。SharpZipLib 可以无缝集成到此类服务中,从而有效地压缩传出数据或解压传入有效载荷。
桌面应用程序: 处理大型数据集或资源文件的桌面应用程序可以利用 SharpZipLib 压缩文件,以便存储或分发。这对于软件安装程序或数据同步工具尤其有用。
开源: 作为一个开源库,SharpZipLib 鼓励协作和社区贡献,确保持续改进和适应不断变化的需求。
跨平台兼容性: SharpZipLib 由 C# 编写,以 .NET 框架为目标,兼容各种平台,包括 Windows、Linux 和 macOS,增强了其通用性。
轻便高效: SharpZipLib 的设计轻便高效,在提供高性能压缩和解压缩功能的同时最大限度地减少了资源消耗。
1.打开 Visual Studio,点击 "创建新项目 "选项。
2.根据要求选择合适的项目模板 (例如,控制台应用程序、Windows 窗体应用程序).
![Sharpziplib Extract ZIP C# (如何为开发人员服务):图 1 - 对于新项目,选择 C# 的 "控制台应用程序"。](/static-assets/pdf/blog/sharpziplib-extract-zip-csharp/sharpziplib-extract-zip-csharp-1.webp)
3.指定项目名称和位置,然后点击 "下一步"。
![Sharpziplib Extract ZIP C# (如何为开发人员服务):图 2 - 通过指定项目名称、位置和解决方案名称来配置项目。接下来,选择 .NET Framework 并点击创建。](/static-assets/pdf/blog/sharpziplib-extract-zip-csharp/sharpziplib-extract-zip-csharp-2.webp)
4.从 "附加信息 "中选择最新的 .NET Framework。单击 "创建 "创建项目。
将 SharpZipLib 集成到您的 .NET 项目中:
1.在您的 Visual Studio C# ConsoleApp,在 "解决方案资源管理器 "中右键单击您的项目,然后选择 "管理 NuGet 包..."
2.在 NuGet 包管理器窗口中,搜索 "SharpZipLib"。
![Sharpziplib Extract ZIP C# (如何为开发人员服务):图 3 - 在 NuGet Package Manager 的搜索栏中搜索 "sharpziplib",使用 Manage NuGet Package for Solution 安装 SharpZipLib,然后选择项目并点击安装按钮。](/static-assets/pdf/blog/sharpziplib-extract-zip-csharp/sharpziplib-extract-zip-csharp-3.webp)
3.从搜索结果中选择 "SharpZipLib",然后点击 "安装 "按钮。
4.NuGet 将自动下载必要的依赖项并添加到项目中。
下面是一个简化示例,演示如何使用 SharpZipLib 压缩和解压文件:
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
namespace SharpZipLibExample
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\SourceDirectory";
string zipFilePath = @"C:\OutputDirectory\compressed.zip";
// Compress files
CompressDirectory(sourceDirectory, zipFilePath);
Console.WriteLine("Files compressed successfully.");
string extractPath = @"C:\OutputDirectory\extracted";
// Decompress files
Decompress(zipFilePath, extractPath);
Console.WriteLine("Files decompressed successfully.");
}
static void CompressDirectory(string sourceDirectory, string zipFilePath)
{
using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
{
zipOutputStream.SetLevel(5); // Compression level (0-9)
// Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);
zipOutputStream.Finish();
zipOutputStream.Close();
}
}
static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
{
string[] files = Directory.GetFiles(sourceDirectory);
foreach (string file in files)
{
var entry = new ZipEntry(Path.GetFileName(file));
zipOutputStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
byte[] buffer = new byte[4096];
int sourceBytes;
while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
zipOutputStream.Write(buffer, 0, sourceBytes);
}
}
}
string[] subdirectories = Directory.GetDirectories(sourceDirectory);
foreach (string subdirectory in subdirectories)
{
AddDirectoryFilesToZip(subdirectory, zipOutputStream);
}
}
static void Decompress(string zipFilePath, string extractPath)
{
using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry entry;
while ((entry = zipInputStream.GetNextEntry()) != null)
{
string entryPath = Path.Combine(extractPath, entry.Name);
if (entry.IsFile)
{
string directoryName = Path.GetDirectoryName(entryPath);
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
using (var fileStream = File.Create(entryPath))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
else if (entry.IsDirectory)
{
Directory.CreateDirectory(entryPath);
}
}
}
}
}
}
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
namespace SharpZipLibExample
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\SourceDirectory";
string zipFilePath = @"C:\OutputDirectory\compressed.zip";
// Compress files
CompressDirectory(sourceDirectory, zipFilePath);
Console.WriteLine("Files compressed successfully.");
string extractPath = @"C:\OutputDirectory\extracted";
// Decompress files
Decompress(zipFilePath, extractPath);
Console.WriteLine("Files decompressed successfully.");
}
static void CompressDirectory(string sourceDirectory, string zipFilePath)
{
using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
{
zipOutputStream.SetLevel(5); // Compression level (0-9)
// Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);
zipOutputStream.Finish();
zipOutputStream.Close();
}
}
static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
{
string[] files = Directory.GetFiles(sourceDirectory);
foreach (string file in files)
{
var entry = new ZipEntry(Path.GetFileName(file));
zipOutputStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
byte[] buffer = new byte[4096];
int sourceBytes;
while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
zipOutputStream.Write(buffer, 0, sourceBytes);
}
}
}
string[] subdirectories = Directory.GetDirectories(sourceDirectory);
foreach (string subdirectory in subdirectories)
{
AddDirectoryFilesToZip(subdirectory, zipOutputStream);
}
}
static void Decompress(string zipFilePath, string extractPath)
{
using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry entry;
while ((entry = zipInputStream.GetNextEntry()) != null)
{
string entryPath = Path.Combine(extractPath, entry.Name);
if (entry.IsFile)
{
string directoryName = Path.GetDirectoryName(entryPath);
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
using (var fileStream = File.Create(entryPath))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
else if (entry.IsDirectory)
{
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"
Dim zipFilePath As String = "C:\OutputDirectory\compressed.zip"
' Compress files
CompressDirectory(sourceDirectory, zipFilePath)
Console.WriteLine("Files compressed successfully.")
Dim extractPath As String = "C:\OutputDirectory\extracted"
' Decompress files
Decompress(zipFilePath, extractPath)
Console.WriteLine("Files decompressed successfully.")
End Sub
Private Shared Sub CompressDirectory(ByVal sourceDirectory As String, ByVal zipFilePath As String)
Using zipOutputStream As New ZipOutputStream(File.Create(zipFilePath))
zipOutputStream.SetLevel(5) ' Compression level (0-9)
' Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream)
zipOutputStream.Finish()
zipOutputStream.Close()
End Using
End Sub
Private Shared Sub AddDirectoryFilesToZip(ByVal sourceDirectory As String, ByVal zipOutputStream As ZipOutputStream)
Dim files() As String = Directory.GetFiles(sourceDirectory)
For Each file As String In files
Dim entry = New ZipEntry(Path.GetFileName(file))
zipOutputStream.PutNextEntry(entry)
Using fileStream = System.IO.File.OpenRead(file)
Dim buffer(4095) As Byte
Dim sourceBytes As Integer
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
Dim subdirectories() As String = Directory.GetDirectories(sourceDirectory)
For Each subdirectory As String In subdirectories
AddDirectoryFilesToZip(subdirectory, zipOutputStream)
Next subdirectory
End Sub
Private Shared Sub Decompress(ByVal zipFilePath As String, ByVal extractPath As String)
Using zipInputStream As New ZipInputStream(File.OpenRead(zipFilePath))
Dim entry As ZipEntry
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)
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)
Dim buffer(4095) As Byte
Dim bytesRead As Integer
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
Directory.CreateDirectory(entryPath)
End If
entry = zipInputStream.GetNextEntry()
Loop
End Using
End Sub
End Class
End Namespace
SharpZipLib 长期以来一直是 .NET 语言开发社区的主要工具,它提供了处理 ZIP、GZip、Tar 和 BZip2 等压缩文件的基本功能。然而,随着技术的发展和开发人员寻求更先进的解决方案,SharpZipLib 的某些局限性已变得显而易见。
复杂性:SharpZipLib 的应用程序接口可能很繁琐,需要开发人员编写冗长的代码才能执行创建或解压缩 ZIP 压缩包等简单任务。
缺乏现代功能:SharpZipLib 缺乏对现代 .NET 功能和平台的支持,因此不太适合现代开发环境。
有限的文档:虽然 SharpZipLib 已经存在了很长时间,但其文档往往稀少且过时,这使得开发人员在入门或排除故障时面临挑战。
IronZIP由 铁软件.NET "ZIP 压缩包 "是在.NET 应用程序中管理 ZIP 存档的现代高效解决方案。利用其直观的 API,开发人员可以轻松创建、读取和操作 ZIP 文件。IronZIP 提供可定制的压缩级别和密码保护等高级功能,确保灵活性和数据安全性。IronZIP 与最新的 .NET 版本兼容,并对性能进行了优化,可轻松高效地简化归档管理任务。
IronZIP 作为一个强大而现代的解决方案,IronZIP 解决了 SharpZipLib 的不足之处。下面介绍 IronZIP 如何弥补这些不足:
高级应用程序接口:IronZIP 提供直观、开发人员友好的 API,可简化归档管理任务。有了 IronZIP,开发人员只需几行代码就能完成复杂的操作,从而减少开发时间和精力。
完全支持 .NET:IronZIP 完全支持最新的 .NET 版本,包括 .NET Core、.NET Standard 和 .NET Framework,确保与现代开发环境和平台兼容。
全面的文档:IronZIP 随附全面的文档和示例,使开发人员能够快速掌握其特性和功能。丰富的文档有助于简化学习曲线,并促进快速集成到项目中。
压缩级别控制:IronZIP 为开发人员提供压缩级别控制,允许他们根据自己的要求调整压缩级别。这一功能使开发人员能够在缩小文件大小和提高压缩速度之间取得平衡。
密码保护:IronZIP 支持 ZIP 存档密码保护,提高了敏感数据的安全性。开发人员可以使用传统、AES128 和 AES256 密码轻松加密 ZIP 压缩包,确保只有授权用户才能访问压缩包的内容。
它还提供了 文件 了解如何开始使用 IronZIP 的页面。即用型 代码示例 帮助您轻松启动。
以下是将 XDocument 与 IronPDF 集成的步骤:
:ProductInstall
下面的源代码展示了 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");
}
}
}
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
SharpZipLib SharpZipLib 是.NET 的一个功能强大的压缩库,为高效处理压缩文件提供了丰富的特性和功能。无论是压缩存储数据、归档文件,还是优化网络服务中的带宽使用,SharpZipLib 都能提供必要的工具来简化压缩和解压缩操作。凭借其开源性、跨平台兼容性和强大的功能,SharpZipLib 仍然是为其 .NET 应用程序中的压缩任务寻求可靠解决方案的开发人员的首选。
虽然 SharpZipLib 一直是在 .NET 应用程序中处理压缩归档的可靠选择,但在当今的开发环境中,它的局限性已变得越来越明显。 IronZIP IronZIP 的出现填补了 SharpZipLib 的空白,提供了一个现代的、功能丰富的替代方案,并将易用性、性能和兼容性放在首位。有了 IronZIP,开发人员可以利用先进的功能和直观的界面,开启归档管理的新可能性,并简化开发工作流程。 应用程序接口.