2010-05-10 70 views
7

是的,我知道GZipStream或DeflateStream是处理压缩/解压缩的.NET Framework中常见的。最好的.NET Framework压缩类?

我希望有压缩/在我的程序解压缩功能,但

  1. 我想一个.NET Framework C#1,而不是第三方的开源。由于我程序中的版权限制,我无法使用。

  2. GZipStream和DeflateStream不太好。例如,GZipStream将文件压缩到480KB,而7Zip将同一文件压缩到57KB的大小。

Microsoft是否有其他好的压缩方法?

由于

+0

感谢您的回复。 我可以问DeflateStream是否使用霍夫曼编码? – Jack 2010-05-10 14:09:37

+0

'DeflateStream'和'GZipStream'都使用了LZ77算法和Huffman编码的组合(请参阅http://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream.aspx和http: /msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx)。 'Deflate'是纯粹的压缩算法,而'GZipStream'包含CRC校验和,*可以通过编写不同的压缩算法来扩展(目前.net框架只是实现了一种压缩算法)。 – 2010-05-10 14:54:13

回答

5

GZipStream和DeflateStream被专门用于压缩,用于存储文件的未压缩一般。

除了这些类以外,压缩还没有内置到.NET中。如果你想要高质量的压缩,你将不得不去第三方库。查看http://www.7-zip.org/sdk.html获取开源7zip库。

+0

该网页指出“LZMA SDK被放置在公共领域”,这应该意味着它可以自由使用,不过你喜欢,不是吗? – 2010-05-10 13:45:21

+0

Dave把它放在了正确的方向,但Stefan给出了准备使用.zip实现7zip算法(这是lzma)的链接。 – Oliver 2010-05-10 13:57:47

+0

绝对免费。 OP说他不想要“第三方开源”。如果成本不是问题,我不确定是什么。 – 2010-05-10 13:59:11

1

我没有任何有关压缩率的统计数据,但我多年来一直在使用SharpZipLib库,并取得了很大的成功。

2

有一个7zip的托管包装。许可证是LGPL,因此您可以在封闭的源项目中使用它。我不知道这是否符合您的许可证要求,因为您没有声明它们。

http://sevenzipsharp.codeplex.com/

0

你也可以的PInvoke使用开源的ZLib(http://www.zlib.net/),或使用它的包装(我用zlib.net - http://www.componentace.com/zlib_.NET.htm - 但我相信它有一些错误)。 它比托管库不太方便,但比DeflateStream/GZipStream更有效(除了GZipStream中额外的CRC之外,它们是相同的)。