.NET 帮助

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

发布 2024年六月6日
分享:

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

什么是 SharpZipLib?

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

特点和功能

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

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

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

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

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

使用案例

  1. 文件压缩和归档: SharpZipLib 非常适合需要压缩和归档文件的应用程序,如备份工具、文件管理工具或数据导出功能。

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

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

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

SharpZipLib 的优势

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

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

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

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

创建 C# Visual Studio 项目

  1. 打开 Visual Studio,点击 "创建新项目 "选项。

  2. 根据您的要求选择合适的项目模板(例如,控制台应用程序、Windows 窗体应用程序).

    Sharpziplib Extract ZIP C# (如何为开发人员工作):图 1 - 对于新项目,选择 C# 中的 控制台应用程序。

  3. 指定项目名称和位置,然后单击 "下一步"。

    Sharpziplib Extract ZIP C#(如何为开发人员服务):图 2 - 通过指定项目名称、位置和解决方案名称来配置项目。 接下来,选择 .NET Framework 并点击创建。

  4. 从 "附加信息 "中选择最新的 .NET Framework。 单击 "创建 "创建项目。

安装过程

将 SharpZipLib 集成到您的 .NET 项目中:

  1. 在您的Visual Studio IDEC# ConsoleApp,右键单击解决方案资源管理器中的项目,选择 "管理 NuGet 包..."

  2. 在 NuGet 包管理器窗口中,搜索 "SharpZipLib"。

    Sharpziplib Extract ZIP C# (如何为开发人员工作):图 3 - 使用 Manage NuGet Package for Solution 安装 SharpZipLib,方法是在 NuGet Package Manager 的搜索栏中搜索 sharpziplib,然后选择项目并点击安装按钮。

  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 的 API 可能比较繁琐,需要开发人员编写冗长的代码才能完成创建或解压缩 ZIP 压缩包等简单任务。

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

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

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

IronZIP:缩小差距

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

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

IronZIP 功能在《SharpZipLib》中,SharpZipLib 作为一个强大而现代的解决方案出现,解决了 SharpZipLib 的不足之处。 以下是 IronZIP 如何填补空白:

  1. 高级 API: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 入门的更多信息。翻译IronZIP 代码示例帮助您轻松上手。

IronZIP 安装

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

  • 开放式Visual Studio IDE或您首选的集成开发环境。
  • 从 "工具 "菜单,导航到 "NuGet 包管理器控制台"。
  • 运行以下命令安装 IronZIP 软件包:
  Install-Package IronZip
  • 另外,您也可以从 NuGet Package Manager for Solutions 安装。
  • 从 NuGet 浏览选项卡中选择 IronZIP,然后点击安装:

    Sharpziplib Extract ZIP C#(如何为开发人员服务):图 5 - 使用 Manage NuGet Package for Solution 安装 IronZIP,方法是在 NuGet Package Manager 的搜索栏中搜索 IronZip,然后选择项目并点击安装按钮。

代码示例

以下源代码展示了 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#

输出压缩文件

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

结论

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

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

IronZIP 提供了一个免费试用许可概述. 从以下网址下载资料库IronZIP 下载并试一试。

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

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

免费NuGet下载 总下载量: 11,781,565 查看许可证 >