.NET 的开源 zip 库? [关闭]
Posted
技术标签:
【中文标题】.NET 的开源 zip 库? [关闭]【英文标题】:Open-source zip library for .NET? [closed] 【发布时间】:2008-12-17 12:28:59 【问题描述】:有没有人知道一个好的.NET 开源压缩库?
【问题讨论】:
可能已被改写为“我需要使用 .net 生成 zip 存档。但是 .Net 缺乏 zip 存档支持。我们如何克服这个问题?”。但从 fx 4.5 开始,这通过 System.IO.Compression.ZipArchive 看起来已修复。 【参考方案1】:SharpZipLib
关于内部 gzip 实现的 cmets 和其他帖子,它们不相同! GZip 不会创建归档所需的标头;它仅对“压缩”一个文件或流有用。
正确的 zip 存档包含一个标头,其中列出了所有压缩文件以及它们在压缩数据中的位置,因此您需要制作标头的东西。这意味着 SharpZipLib,是众多商业版本之一,或者使用带有 .NET 绑定的外部软件,如 7zip。
碰巧有人想说:“但我一直在 Linux 中看到 .gz
文件!” - 它们只是单个文件,.tar.gz
也不例外 - tar 是存档文件。 .gz
是压缩包。
【讨论】:
您不需要这个 .NET 具有内置功能:请参阅 gzipstream 类。 gzipstream 不是 zip 功能附近的任何东西。 我认为你对文件太着迷了...... gzip 是一种通用的压缩格式。 对,gzip 是一种压缩格式,但不适用于文件容器。而且 gzip 不是 zip。 不幸的是。 SharpZipLib 目前无人维护,而且有些漏洞。【参考方案2】:几个cmets。
-
不要使用 J# 运行时。 J# 已被 Microsoft 停止使用。未来的支持值得怀疑。此外,当您想要的只是 ZIP 支持时,整个 J# 运行时是一个大难题。
System.IO.Compression 中的 GzipStream,自 .NET 2.0 起是 .NET 基类库的一部分,为IETF RFC-1952 压缩提供流接口。压缩是可以的,虽然压缩比不是最优的,它会显着扩展之前压缩过的数据。这个bug was reported to Microsoft, but it's apparently been closed。还有一个类似的 DeflateStream,但用于RFC 1951。有一个常见的误解是 GZipStream 会压缩文件。不对。 这两个都不是 zip 文件。
有 System.IO.Packaging.ZipPackage。它可以工作,但主要用于打包 MS Office 2007(.docx、.xslx 和 .pptx)文件。它对于 zip 文件很笨拙,并且不支持很多 ZIP 功能,例如加密。
如果您想以灵活的方式在 .NET 中创建和读取 zip 文件,目前您需要一个第三方库。
DotNetZip 是一个不错的第 3 方选项。免费、开源、积极维护、使用简单、体积小、功能集好。它作为单个程序集交付 - 它是完全托管的代码。适用于 Compact Framework 以及常规 .NET Framework。先决条件是 .NET 2.0。
DotNetZip 还包含一个 ZLIB 库,其中包含 Zlib,GZip,DeflateStream 等类。它们与 .NET 的内置类相当,但它们包括设置压缩级别的能力,并且在更高级别上,它们比内置类更有效地压缩。 ZlibStream 进行RFC 1950 压缩。
DotNetZip 支持 ZIP64、密码、AES 加密、流、SFX 和 Unicode。每个使用它的人都说它比 SharpZipLib 使用起来简单得多。有一个很好的帮助文件 (.chm) 和很多代码示例。
【讨论】:
您知道,DotNetZip 可以包含在开源项目中吗?我听说 Microsoft Public License 不能与 GPL 一起使用。 首先,我不是知识产权律师,也不是软件许可及其相互兼容性方面的专家。但是,我有信心可以肯定地回答您的第一个问题:DotNetZip 可以在开源项目中使用。您的评论中还有第二个隐含的问题:根据 MS-PL 许可的库可以与代码或根据 GPL 许可的库一起使用吗?这完全是一个不同的问题,我不会试图回答它。我不确定,但您可能会假设“开源意味着 GPL”。这不是一个有效的假设。 很棒的图书馆,谢谢! DotNetZip 现在遇到了与 SharpZipLib 相同的问题:不再维护(自 2011 年以来没有新版本),使用 serious bug。但是从 .Net 4.5 开始,我们现在有了 System.IO.Compression.ZipArchive 类:我还没有测试它。【参考方案3】:DotNet Zip 库 (Ionic.Zip.dll) 非常易于使用。我觉得它比SharpZip更容易实现。
http://www.codeplex.com/DotNetZip
【讨论】:
不扩展 SharpZipLib 所做的某些文件。 哪些文件没有展开? @Sergey - 是的,关于警告的更多细节?【参考方案4】:尝试查看7-zip。它是开源的,也是我最喜欢的 zip 程序。非常kewl。也利用了多核。
.NET SDK 可用here。
【讨论】:
Dude - 7 zip 是一个压缩程序。它也是开源的 .. 所以这意味着它是 .NET 对吗? ==> LZMA压缩和解压的C#源代码 +1,SDK 也是公共领域,这对我来说听起来不错。 请注意:7-zip 的(安全)C# 实现比非托管库慢得多,比如 10 倍(个人印象,没有基准测试,因为差异如此之大)大)。【参考方案5】:**** 但是伙计们 .NET 已经支持开源 zip....****
http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
这与 GZIP 库兼容。我用它来压缩 C# 数据并在 C++ 应用程序中跨网络解压缩。工作正常。
托尼
【讨论】:
压缩率与 7-Zip 相比如何? system.io.compression 命名空间没有完全打开,有用的东西在 microsoft.internal 命名空间中。在 system.io.compression 中,仅用于创建小型压缩文件的部分,例如新的办公文件,而不是真正的压缩文件。 他并没有说他想生成文件....他可能只是想压缩信息以便以多种方式中的一种保留,对吗? 抱歉,不是真正的 zip 文件意味着没有 zip 文件容器,而是数据,即通过 deflate 算法打包的数据。查看 system.io.compression 中的函数,您会清楚地看到,目的与 microsoft.internal.zip 不同 -> sharpziblib 涵盖的内容是什么。 不,Russ - System.IO.Compression 中的 .NET 库不创建或读取 ZIP 文件。我同意贝奥武夫的观点。您可以尝试 System.IO.Packaging,但这会让您感到沮丧。第三方库是最好的。以上是关于.NET 的开源 zip 库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
有没有好的免费 .Net 网络库? (FTP、SFTP、SSH 等)[关闭]