.NET 帮助

Sharpziplib 提取 ZIP 文件 C#(开发人员如何操作)

发布 2024年六月6日
分享:

在数据管理至关重要的当今数字领域,拥有高效的压缩和解压缩工具至关重要。在 .NET 生态系统中脱颖而出的一款工具是 SharpZipLib.在本文中,我们将深入研究 SharpZipLib,探索其功能、应用以及如何将其集成到您的 .NET 项目中。

什么是 SharpZipLib?

SharpZipLib 是一个功能丰富、开源的 .NET 压缩库,完全用 C# 编写。它全面支持各种压缩格式,包括 ZIP、GZip 和 Tar。SharpZipLib 由一个专门的社区开发,为高效压缩和解压文件提供了广泛的功能。

特点和功能

  1. 支持多种压缩格式: SharpZipLib 支持 ZIP、GZip 和 Tar 等流行的压缩格式,可满足不同的使用情况和要求。

  2. 基于流的操作: 该库基于流进行操作,使开发人员能够处理各种来源的数据,包括文件、内存流或网络流。这种灵活性有利于无缝集成到应用程序的不同部分。

  3. 压缩级别: 开发人员可以根据自己的具体需求,微调压缩级别,在压缩率和处理速度之间取得平衡。

  4. 密码保护: SharpZipLib 允许创建受密码保护的 ZIP 压缩包,通过使用指定密码对内容进行加密,确保数据安全。

  5. 错误处理和恢复: 强大的错误处理机制使开发人员能够在压缩和解压缩操作过程中优雅地处理异常。此外,SharpZipLib 还支持从损坏的压缩文件中恢复,从而提高了可靠性。

使用案例

  1. 文件压缩和归档: SharpZipLib 是需要压缩和归档文件的应用程序的理想选择,例如备份工具、文件管理工具或数据导出功能。

  2. 网络服务和 API: 处理文件传输或数据交换的网络服务经常受益于压缩,以减少带宽的使用。SharpZipLib 可以无缝集成到此类服务中,从而有效地压缩传出数据或解压传入有效载荷。

  3. 桌面应用程序: 处理大型数据集或资源文件的桌面应用程序可以利用 SharpZipLib 压缩文件,以便存储或分发。这对于软件安装程序或数据同步工具尤其有用。

  4. 数据备份和存储: 需要定期备份或以压缩格式存储数据的应用程序可以使用 SharpZipLib 自动执行备份过程并有效节省存储空间。

SharpZipLib 的优势

  1. 开源: 作为一个开源库,SharpZipLib 鼓励协作和社区贡献,确保持续改进和适应不断变化的需求。

  2. 跨平台兼容性: SharpZipLib 由 C# 编写,以 .NET 框架为目标,兼容各种平台,包括 Windows、Linux 和 macOS,增强了其通用性。

  3. 轻便高效: SharpZipLib 的设计轻便高效,在提供高性能压缩和解压缩功能的同时最大限度地减少了资源消耗。

  4. 广泛的文档和支持: 全面的文档和社区支持使开发人员在使用 SharpZipLib 时更容易集成和排除故障。

创建 C#Visual Studio 项目

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
VB   C#

SharpZipLib 长期以来一直是 .NET 语言开发社区的主要工具,它提供了处理 ZIP、GZip、Tar 和 BZip2 等压缩文件的基本功能。然而,随着技术的发展和开发人员寻求更先进的解决方案,SharpZipLib 的某些局限性已变得显而易见。

SharpZipLib 的限制

  1. 复杂性:SharpZipLib 的应用程序接口可能很繁琐,需要开发人员编写冗长的代码才能执行创建或解压缩 ZIP 压缩包等简单任务。

  2. 缺乏现代功能:SharpZipLib 缺乏对现代 .NET 功能和平台的支持,因此不太适合现代开发环境。

  3. 有限的文档:虽然 SharpZipLib 已经存在了很长时间,但其文档往往稀少且过时,这使得开发人员在入门或排除故障时面临挑战。

  4. 性能:SharpZipLib 的性能可能并不总是能满足开发人员的期望,尤其是在处理大型或复杂的归档文件时。

IronZIP:缩小差距

IronZIP铁软件.NET "ZIP 压缩包 "是在.NET 应用程序中管理 ZIP 存档的现代高效解决方案。利用其直观的 API,开发人员可以轻松创建、读取和操作 ZIP 文件。IronZIP 提供可定制的压缩级别和密码保护等高级功能,确保灵活性和数据安全性。IronZIP 与最新的 .NET 版本兼容,并对性能进行了优化,可轻松高效地简化归档管理任务。

Sharpziplib Extract ZIP C# (如何为开发人员服务):图 4 - IronZIP for .NET:C# Zip 档案库

IronZIP 作为一个强大而现代的解决方案,IronZIP 解决了 SharpZipLib 的不足之处。下面介绍 IronZIP 如何弥补这些不足:

  1. 高级应用程序接口:IronZIP 提供直观、开发人员友好的 API,可简化归档管理任务。有了 IronZIP,开发人员只需几行代码就能完成复杂的操作,从而减少开发时间和精力。

  2. 完全支持 .NET:IronZIP 完全支持最新的 .NET 版本,包括 .NET Core、.NET Standard 和 .NET Framework,确保与现代开发环境和平台兼容。

  3. 全面的文档:IronZIP 随附全面的文档和示例,使开发人员能够快速掌握其特性和功能。丰富的文档有助于简化学习曲线,并促进快速集成到项目中。

  4. 压缩级别控制:IronZIP 为开发人员提供压缩级别控制,允许他们根据自己的要求调整压缩级别。这一功能使开发人员能够在缩小文件大小和提高压缩速度之间取得平衡。

  5. 密码保护:IronZIP 支持 ZIP 存档密码保护,提高了敏感数据的安全性。开发人员可以使用传统、AES128 和 AES256 密码轻松加密 ZIP 压缩包,确保只有授权用户才能访问压缩包的内容。

  6. 性能优化:IronZIP 针对性能进行了优化,与 SharpZipLib 相比,压缩和提取速度更快。这种优化可确保开发人员在不影响性能的情况下高效处理大量数据。

它还提供了 文件 了解如何开始使用 IronZIP 的页面。即用型 代码示例 帮助您轻松启动。

IronZIP 安装

以下是将 XDocument 与 IronPDF 集成的步骤:

  • 打开 Visual Studio 或您喜欢的集成开发环境。
  • 从 "工具 "菜单导航到 "NuGet 包管理器控制台"。

  • 运行以下命令安装 IronZIP 软件包:
  :ProductInstall
  • 或者,您也可以从 NuGet Package Manager for Solutions 安装。
  • 从 NuGet 浏览选项卡中选择 IronZIP,然后单击安装:

Sharpziplib Extract ZIP C# (如何为开发人员服务):图 5 - 在 NuGet 包管理器的搜索栏中搜索"IronZip",使用管理解决方案的 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");
        }
    }
}
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
VB   C#

输出 Zip 文件

Sharpziplib Extract ZIP C#(如何为开发人员工作):图 6 - 输出:使用 IronZIP 创建的带密码保护的 Zip 压缩包。

结论

SharpZipLib SharpZipLib 是.NET 的一个功能强大的压缩库,为高效处理压缩文件提供了丰富的特性和功能。无论是压缩存储数据、归档文件,还是优化网络服务中的带宽使用,SharpZipLib 都能提供必要的工具来简化压缩和解压缩操作。凭借其开源性、跨平台兼容性和强大的功能,SharpZipLib 仍然是为其 .NET 应用程序中的压缩任务寻求可靠解决方案的开发人员的首选。

虽然 SharpZipLib 一直是在 .NET 应用程序中处理压缩归档的可靠选择,但在当今的开发环境中,它的局限性已变得越来越明显。 IronZIP IronZIP 的出现填补了 SharpZipLib 的空白,提供了一个现代的、功能丰富的替代方案,并将易用性、性能和兼容性放在首位。有了 IronZIP,开发人员可以利用先进的功能和直观的界面,开启归档管理的新可能性,并简化开发工作流程。 应用程序接口.

IronZIP 提供了一个 免费试用 页。从以下网址下载资料库 链接并试一试。

< 前一页
Xceed.Document .NET(开发人员如何使用)
下一步 >
Xdocument C#(如何为开发者工作)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >