【发布时间】:2011-07-13 17:30:48
【问题描述】:
如何使用 C# 解压缩文件?我发现我必须使用第三方库。有没有直接的方法?
【问题讨论】:
-
不同意投票关闭这个基于是一个精确的重复,因为它似乎是一个稍微不同的变体(推荐系统库与推荐外部库),即使答案最终重叠。
如何使用 C# 解压缩文件?我发现我必须使用第三方库。有没有直接的方法?
【问题讨论】:
System.IO.Packaging 命名空间包含一些压缩类,例如ZipPackage,但它们绝不像使用第三方库那么简单。我强烈建议您考虑使用第三方库。
【讨论】:
你可以使用框架的工具来压缩然后解压缩
sinxe .NET 1.x 网络上有很多压缩库,有些是免费的,有些是商业的。 一个很棒的免费库是#Zip,或者免费 C# IDE 的创建者#develop。
.NET Framework 2.0 引入了用于压缩和解压缩流的 GZipStream 和 DeflateStream 类。以下是 MSDN 上的链接:
http://msdn2.microsoft.com/en-us/library/system.io.compression.gzipstream(VS.80).aspx
http://msdn2.microsoft.com/en-US/library/system.io.compression.deflatestream(VS.80).aspx
【讨论】:
Codeplex 的免费Iconic Zip 让我很幸运。它的拉链和解压缩速度非常快,效果很好,而且体积小。它也适用于 Mono。
【讨论】:
.NET 4.5 有一个更有用的 ZipPackage 类
http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx
还是不太好用,类文档中的示例代码比较长。
【讨论】:
对于 zip 文件,DotNetZip 效果很好。只需一个程序集即可支持 zip 文件。
对于 gzip 文件,您可以使用System.IO.Compression namespace 或DotNetZip 中的流。请注意,如果您有 *.tar.gz 或 *.tgz 文件,则您还需要能说出 tar(1) 或 tar(5) 的内容。
对于 zlib 压缩数据,DotNetZip 再次成为您的朋友。 zlib 使用 Deflate 算法。不过,我不确定 zlib6 和 System.IO.Compression.DeflateStream 是否兼容。
还有其他支持这些压缩格式的库,但我相信其中有很多是非托管代码的包装器。这是好事还是坏事取决于您的要求。
DotNetZip 是纯托管代码。我的测试表明它的运行速度与Info-Zip's open-source zip/unzip 实现的速度大致相同。生成的压缩文件不是字节相同的,但它们是兼容的并且具有大致相同的压缩率。
编辑注释: DotNetZip 曾经住在 Codeplex。 Codeplex 已关闭。旧档案仍然是available at Codeplex。看起来代码已经迁移到Github了:
【讨论】: