热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET开源压缩组件介绍与入门

.NET开源压缩组件介绍与入门【资料限时发送】1.前言作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作。这次也是由

.NET开源压缩组件介绍与入门【资料限时发送】

1.前言

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

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

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

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

数据压缩是按照特定的编码机制用比未经编码少的数据比特(或者其它信息相关的单位)表示信息的过程。随着信息技术的高速发展,数据压缩的使用在网络时代越来越重要。对一些特殊的数据如相片、音频、视频的压缩算法也不同。我们今天说的压缩算法都是无损压缩,无损数据压缩指数据经过压缩后,信息不受损失,还能完全恢复到压缩前的原样。“无损”一词是相对于有损数据压缩,有损数据压缩只允许一个近似原始数据进行重建,以换取更好的压缩率。常见的无损压缩算法有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,很久没更新了,也很稳定。网址:http://dotnetzip.codeplex.com/ 。使用DotNetZip,可以很容易的创建、解压以及更新ZIP文件。官网有很多例子,以及介绍,篇幅比较长,就不去翻译了。简单使用,看下一节的使用例子就行了。

3.2 7Zip-SevenZipSharp

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

3.3 综合-SharpCompress 

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

3.4 关于调用WINRAR

在处理压缩文件时,还有一种常见的方法,就是使用WINRAR的命令行。网上有很多操作的例子,我也测试过,成功了。但不得不说,灵活性很差。肯定可以满足一小部分人的需求,但我认为这个方法的确不太好。所以在这里就不提倡了,毕竟有现成的更好的东西。为什么说这个WINRAR呢?主要是大家都知道WINRAR是收费的,RAR是专利算法,但其实WINRAR还是提供了免费的程序调用方式,就是UNRAR,在WINRAR的安装文件夹有一个UnrarSrc.txt的说明文件,打开它,里面有地址:www.rarlab.com。需要的自己去看,我找这个东西可花了不少时间,就是因为资料太少,所以也留个脚印吧。

4.基本入门使用教程

4.1 DotNetZip的基本使用

 1 //创建压缩文件
 2 using (ZipFile zip = new ZipFile())
 3 {
 4     //设置密码,也可以为每个文件单独设置密码
 5     zip.Password= "123456!"; 
 6     //添加文件
 7     zip.AddFile("ReadMe.txt");
 8     //添加目录
 9     zip.AddDirectory(@"MyDocuments\ProjectX");
10     //设置备注信息
11     zip.Comment = "This is a demo";
12     //还可以设置压缩方式,编码等
13     //保存文件
14     zip.Save("Package.zip");
15 }
16 
17 //解压文件
18 using (ZipFile zip = ZipFile.Read("Demo.zip"))
19 {   //遍历zip文件中每一个文件对象,然后解压到指定目录
20     foreach (ZipEntry e in zip)
21     {
22         e.Extract(@"C:\test", true);
23         //若有密码,用下面这个方法
24         e.ExtractWithPassword(BaseDirectory, Password);
25     }
26     //也可以通过索引访问文件对象
27     //ZipEntry e = zip["MyReport.doc"];
28 }

当然这只是最简单的压缩和解压Zip文件的操作,还有更多功能可以操作Zip,比如移除文件,通过文件流来压缩和解压缩等等。可以看一下帮助文档,这里只是介绍最基本的功能。因为这次研究这个主要是为了检测错误的Zip文件,所以在这里,留一个疑问给大家:如何判断一个zip文件是否损坏?过一段时间会给大家一个思路,当然不是唯一的解决办法。

4.2 SevenZipSharp基本使用

这里只演示基本的使用,类库还有异常处理、文件流操作等。可以看帮助文档。

 1 //初始化一个压缩器,这个对象一次可以压缩多个文件
 2 SevenZipCompressor sc = new SevenZipCompressor();
 3 //设置压缩格式,这里是枚举类型,可以选其他的
 4 sc.ArchiveFormat = OutArchiveFormat.Zip;
 5 //压缩模式,新创建还是追加,若是追加
 6 sc.CompressiOnMode= CompressionMode.Create;
 7 //设置压缩算法,也可以不设置,采用默认的
 8 //可以使用ZipEncryptionMethod来设置每个文件的密码
 9 sc.CompressiOnMethod= SevenZip.CompressionMethod.Default;
10 //单独压缩文件,CompressFilesEncrypted方法可以设置密码
11 //注意这里的文件路径,要写全称
12 sc.CompressFiles("test.zip", @"C:\X\a.txt", @"C:\X\b.txt");
13 //CompressDirectory 方法单独压缩目录
14 //CompressFileDictionary方法可以压缩文件或者目录,传入一个字典,会自动识别目录或者文件
15 
16 //解压缩,可以在初始化的时候设置解压密码
17 SevenZipExtractor se = new SevenZipExtractor("test.zip");
18 foreach (var item in se.ArchiveFileNames)
19 {   //逐一解缩
20     se.BeginExtractFiles(@"C:\X", item);                
21 }
22 //一次性全部解压
23 // se.BeginExtractArchive(@"C:\X");

4.3 SharpCompress基本使用

SharpCompress是在DotNetZip等开源项目的基础上发展起来的,因此其使用和DotNetZip很类似。这里给一个网址,上面有例子,大家自己去琢磨一下:例子链接

4.总结与资源

总结起来,我觉得DotNetZip使用最灵活,而SevenZipSharp与SharpCompress支持的格式多,而且7zip的压缩率很大,格式开源,使用的场合比较多。RAR格式尽量不要用吧,商业算法,非要使用,一般的类库都可以解压,但压缩可以用上面3.4节提到的UNRAR。可能也还有很多其他的开源组件,不足之处,还请大家指出。

下面是上面几个开源类库的网址以及相关使用资源:

DotNetZip     :http://dotnetzip.codeplex.com/

SevenZipSharp :http://sevenzipsharp.codeplex.com/

SharpCompress:http://sharpcompress.codeplex.com/

 

编程爱好者,关注.NET软件开发,Matlab编程及网络技术

http://www.cnblogs.com/asxinyu/

E-mail:asxinyu@qq.com

 
分类: C#.NET开发, 开源技术
标签: C#压缩, .NET压缩, 开源压缩组件, 7zip, rar, zip, 压缩格式
推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
author-avatar
周周微商互联
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有