.NET Info-ZIP 封装






3.67/5 (3投票s)
一个用于 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 库有两个主要的类:KarnaZip
和 KarnaUnzip
。
KarnaZip
是一个用于处理 zip 压缩文件的类,可以向压缩文件中添加、更新或移动文件。
KarnaUnzip
可用于将文件从 ZIP 压缩文件提取到硬盘或内存中。
使用代码
创建 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 日:初始发布。