65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Info-ZIP 封装

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (3投票s)

2009年5月25日

CPOL

2分钟阅读

viewsIcon

46227

downloadIcon

522

一个用于 Info-ZIP 库的 C# 封装。

挑战

当今的许多应用程序需要从 ZIP 压缩文件中提取特定文件的能力,无论是提取到硬盘上还是内存中。在 Web 上有许多有用的 .NET 应用程序的 zip 库(SharpZipLib for .NET Framework 是一个非常著名的库),但我希望使用 Info-ZIP 库,因为它一直是我的 C++ 项目中最喜欢的库。

Info-ZIP 是 Phil Katz 的“deflate”和“inflate”例程的开源版本,这些例程被用于他流行的文件压缩程序 PKZIP 中。Info-ZIP 代码已被合并到许多第三方产品中,包括商业软件和免费软件。它提供了两个动态链接库:一个用于压缩,一个用于解压缩。

Info-ZIP DLL 可以免费使用和分发,但它们被设计用于 C/C++ 项目,因此不太适合 .NET。此外,Info-ZIP 包几乎没有文档说明如何使用 Info-ZIP DLL。

因此,我决定编写一个小的 C# 封装,提供所有必需的数据类型和函数,以便能够使用 Info-ZIP API。

解决方案

我将 Info-ZIP .NET 封装构建为一个名为 Karna Compression 的 C# 库,其中所有 Info-ZIP 本机类型和方法都隐藏在简单的 .NET 接口之后。Karna Compression 库有两个主要的类:KarnaZipKarnaUnzip

KarnaZip 是一个用于处理 zip 压缩文件的类,可以向压缩文件中添加、更新或移动文件。

KarnaZip.png

KarnaUnzip 可用于将文件从 ZIP 压缩文件提取到硬盘或内存中。

KarnaUnzip.png

使用代码

创建 zip 压缩文件,包括密码保护和注释,只需要几行代码

string[] content = { "*.txt" };
KarnaZip zip = new KarnaZip();
zip.FileName = "myziparchive.zip";
zip.Password = "password"; //optional
zip.Comment = "This is my documents archive";
zip.AddFiles(content);

对 zip 压缩文件的其他操作可以以类似的方式执行

//Update files
zip.UpdateFiles(content);

//Move files to the archive
zip.MoveFiles(content);

//Delete files from the archive
zip.DeleteFiles(content);

使用 KarnaUnzip 类从压缩文件中提取文件更加简单

KarnaUnzip unzip = new KarnaUnzip("myziparchive.zip");
unzip.Password = "password"; //optional
unzip.ExtractArchive(); 

以下代码片段演示了如何将文件从压缩文件提取到内存中,而无需将其保存到硬盘上

byte[] rawBytes;
KarnaUnzip unzip = new KarnaUnzip("myziparchive.zip");
rawBytes = unzip.ExtractToMemory("readme.txt");

附加信息

Karna Compression 是开源 Karna .NET 库的一个小部分,可以从 SourceForge 网站下载:http://www.sourceforge.net/projects/karna

有关 Info-ZIP 项目的更多信息,请访问 Info-ZIP 的主页:www.info-zip.org

历史

  • 2009 年 5 月 25 日:初始发布。
© . All rights reserved.