C# 压缩组件介绍与入门

时间:2022-03-06 02:37:44

作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作。这次也是由于吉日嘎拉发布了一个有关“压缩文件损坏检测”的外包任务,最早在2009年用C#很简单的使用过压缩组件,这次有了这个需求,才所以才深入研究一番,顺便有了这篇博客。

在日常项目开发过程中,操作Zip或者RAR压缩文件也是一件比较常见的事情。主要是打包文件,解压文件等等常规的操作,也相信很多人也用过.NET自带的GZip压缩。今天要给大家介绍的是一些开源的压缩组件的一些简单入门,由于压缩格式很多,效率也不一样,所以开源的东西还是很不错的,支持很全面。

还是老规矩,本文将对这篇文章中提到的相关组件及其源代码,文档或者官方案例打包,统一于3月6日上午11点左右发送,需要的留下邮箱,过期不候。当然,好的文章和资源还需要园友们的支持,如果对你有帮助,不要吝啬鼠标哦,你们的支持就是我原创的动力。

2.关于压缩格式和算法的基础

数据压缩是按照特定的编码机制用比未经编码少的数据比特(或者其它信息相关的单位)表示信息的过程。随着信息技术的高速发展,数据压缩的使用在网络时代越来越重要。对一些特殊的数据如相片、音频、视频的压缩算法也不同。我们今天说的压缩算法都是无损压缩,无损数据压缩指数据经过压缩后,信息不受损失,还能完全恢复到压缩前的原样。“无损”一词是相对于有损数据压缩,有损数据压缩只允许一个近似原始数据进行重建,以换取更好的压缩率。常见的无损压缩算法有LZW、ZIP、RAR、7-Zip等。详细看看几种主流的无损数据压缩格式:

ZIP文件格式是一种流行的数据压缩和文档储存的文件格式,原名Deflate。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7-Zip格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。该格式开放而且免费,越来越多的软件内嵌支持打开Zip文件。

RAR是一种专利文件格式,用于数据压缩与归档打包,RAR编码器一直是有专利的。所以这也就是为什么我们看到很多开源的压缩软件或者工具能够解压RAR,而不支持RAR打包的原因。RAR通常情况比ZIP压缩比高,但压缩/解压缩速度较慢。

7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初被7-Zip实现并采用,但是这种档案格式是公有的,并且7-Zip软件本身亦在GNU宽通用公共许可证 (GNU LGPL)协议下开放源代码。7z格式的主要特色有:开源且模块化的组件结构(允许使用任何压缩,转换或加密算法);高压缩比率(使用不同的压缩算法会有不同的结果);支持超大文件;该格式的开发结构允许添加标准以外的压缩算法。

总结:总的来说,我还是比较喜欢7Zip格式,压缩率确实高很多,而且开源。但是如果实际项目由于历史原因等,需要采用Zip或者RAR的,也没办法,还是有很多开源的组件可供选择。

3.几种常见的.NET开源数据压缩组件 3.1 ZIP-DotNetZip

DotNetZip是.NET开源压缩组件中比较早的一个,我在2009年的时候给导师折腾一个小项目,就用到了,所以对其基本操作很熟悉。现在最新版本是1.9.1.8,很久没更新了,也很稳定。网址: 。使用DotNetZip,可以很容易的创建、解压以及更新ZIP文件。官网有很多例子,以及介绍,篇幅比较长,就不去翻译了。简单使用,看下一节的使用例子就行了。

3.2 7Zip-SevenZipSharp

SevenZipSharp是.NET下开源的7-Zip格式操作组件,支持所有的7Zip格式。目前最新版本是2010年发布的0.64。由于7Zip的高压缩率以及开源特点,在新项目中使用是最好的选择。网址: 。它支持的格式比上面多,如:7Zip,RAR,ZIP,Gzip,Cab,LZH等等。注意,除了引用这个组件之外,还需要加7z.dll文件拷贝到bin目录中,因为SevenZipSharp是对7z.dll的一个封装。7z.dll可以在官网下载到,或者看我最后的资料下载,会打包进去的。

3.3 综合-SharpCompress 

SharpCompress 也是.NET下开源的压缩文件操作组件。与上面2个不同的是,他支持的格式更多,如RAR,ZIP,Tar,7Zip等等。这个开源项目好像是去年才开始的,在其他几个开源的项目基础上发展而来,也包括了DotNetZip,Nunrar项目。当然对RAR也只是解压,上面提到了RAR是专利算法,所以不支持创建RAR文件。当然这个还支持很多其他的压缩格式,比如Tar、GZip等等,就不多说了,例子就用我们最常见的ZIP、RAR和7Zip。

3.4 关于调用WINRAR