关于压缩格式和算法的基础
数据压缩是按照特定的编码机制用比未经编码少的数据比特(或者其它信息相关的单位)表示信息的过程。随着信息技术的高速发展,数据压缩的使用在网络时代越来越重要。对一些特殊的数据如相片、音频、视频的压缩算法也不同。我们今天说的压缩算法都是无损压缩,无损数据压缩指数据经过压缩后,信息不受损失,还能完全恢复到压缩前的原样。“无损”一词是相对于有损数据压缩,有损数据压缩只允许一个近似原始数据进行重建,以换取更好的压缩率。常见的无损压缩算法有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宽通用公共许可证(GNULGPL)协议下开放源代码。7z格式的主要特色有:开源且模块化的组件结构(允许使用任何压缩,转换或加密算法);高压缩比率(使用不同的压缩算法会有不同的结果);支持超大文件;该格式的开发结构允许添加标准以外的压缩算法。
总结:总的来说,我还是比较喜欢7Zip格式,压缩率确实高很多,而且开源。但是如果实际项目由于历史原因等,需要采用Zip或者RAR的,也没办法,还是有很多开源的组件可供选择。
3.几种常见的.NET开源数据压缩组件
3.1ZIP-DotNetZip
DotNetZip是.NET开源压缩组件中比较早的一个,我在2009年的时候给导师折腾一个小项目,就用到了,所以对其基本操作很熟悉。现在最新版本是1.9.1.8,很久没更新了,也很稳定。网址:http://dotnetzip.codeplex.com/。使用DotNetZip,可以很容易的创建、解压以及更新ZIP文件。官网有很多例子,以及介绍,篇幅比较长,就不去翻译了。简单使用,看下一节的使用例子就行了。
3.27Zip-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.1DotNetZip的基本使用
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.2SevenZipSharp基本使用
这里只演示基本的使用,类库还有异常处理、文件流操作等。可以看帮助文档。
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.3SharpCompress基本使用
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/
分享到:
相关推荐
标题 "国外最新开源asp.net(C#)网店2008 11-25发布" 提供了几个关键信息点,首先,这是一个基于ASP.NET技术的开源网店项目,这意味着它使用微软的Web开发框架来构建电子商务平台。ASP.NET是.NET Framework的一部分...
标题"AForge.NET.ZIP"指的是一个包含AForge.NET框架相关组件的压缩文件,而"AForge.NET"是一个开源的.NET框架,专注于计算机视觉和图像处理。这个框架为开发者提供了丰富的类库,支持各种图像分析、模式识别以及机器...
ASP.NET Core是一个跨平台、高性能的开源框架,用于构建现代云原生应用程序。它由微软开发,旨在将ASP.NET框架与.NET Core相结合,提供了一种轻量级、模块化且可移植的解决方案,适用于Web应用、APIs以及云计算服务...
在【描述】中提到,asp.net技术是该系统的开发基础,它是一种基于微软.NET Framework的服务器端编程模型,用于构建动态网站、Web应用和Web服务。asp.net提供了丰富的功能和高效性能,使得开发者能够快速构建功能强大...
6. **SharpZipLib.dll**:一个免费且开源的ZIP和GZIP文件解压缩库。 7. **Math.NET**:提供了强大的数学计算能力,包括微积分和方程求解等功能。 8. **DocX**:允许开发者通过C#直接操作Word文件,无需安装Word...
- 将下载的文件解压缩,通常包含以下几个文件: - `Ext.Net.dll` - `Ext.Net.Utilities.dll` - `Ext.Net.xml` - `Newtonsoft.Json.dll` - `Newtonsoft.Json.xml` 3. **创建项目**: - 打开 Visual Studio,...
Taglib#是一个跨平台的元数据库,而UltraID3Lib专注于处理ID3标签,这是一种常见的音频文件元数据格式。 4. OptimFROG.dll:OptimFROG是一个高效的音频编码器,以其高音质和压缩率而闻名,这个组件可能用于支持...
标题中的"imagemagick_brickpme_zip_vb.net_glad67v_"似乎是一个项目或软件版本的标识符,其中包含几个关键组件。让我们逐一解析这些关键词。 1. **Imagemagick**:这是一个开源的跨平台图像处理库,支持多种编程...
4. **ICSharpCode.SharpZipLib.dll**:一个开源的压缩库,可能用于处理文件压缩和解压缩操作。 5. **Spring.Data.dll**:Spring.NET的数据访问模块,扩展了对数据库操作的支持,包括与NHibernate的集成。 6. **antlr...
【描述】中提到的".rar"文件格式是一种常见的压缩文件格式,通常用来打包多个文件或目录,便于存储和传输。在本案例中,这个RAR文件包含了整个搜索引擎项目的源代码和其他可能的资源文件。 【标签】中的“互联网”...
在提供的压缩文件中,"ASP.NET-[论坛社区]FrienDe开源社区系统 v1.0 Beta_friendevweb_20081028.rar"是主要的文件,很可能包含了FrienDe社区系统的Web应用程序源代码。此文件可能包括以下几个部分: 1. **源代码...
.Net框架是微软开发的一种应用程序开发平台,它提供了一种用于构建和运行各种应用程序的环境。在.NET应用程序开发中,为了保护代码不被轻易反编译和破解,开发者通常会使用混淆器(如Dotfuscator、MaxToCode)对代码...
2. **ASP.NET Web Forms**:另一种可能的实现方式是使用Web Forms,它提供了事件驱动的编程模型,类似于Windows应用程序的开发。 3. **ADO.NET**:用于与数据库交互,如SQL Server,通过连接字符串、数据适配器、...
ComponentOne Studio for .NET包括了多个组件系列,例如FlexGrid、TrueDBGrid、Preview、Reports、Chart等,这些组件都具有高度可定制性,能够帮助开发者快速构建复杂的应用程序。 #### ComponentOneStudio for ...
在.NET MVC 4.0中,有几个关键的组件和改进: 1. **Razor视图引擎**:这是一种轻量级的视图引擎,它允许开发者在视图中混合C#代码和HTML,使得代码更加简洁易读。 2. **路由(Routing)**:路由系统是.NET MVC的...
**标题解析:** ...综上所述,OwinDog是一个面向.NET开发者的高性能HTTP服务器,它遵循OWIN标准,提供了一种灵活、高性能的解决方案来托管web应用程序,并且作为一个开源项目,允许开发者深入研究和定制。
1. **.NET Framework**:这是由微软开发的一种软件框架,主要用于Windows平台,但它包含了运行.NET应用程序所需的所有组件,包括公共语言运行库和类库。.NET Linux将.NET框架引入了Linux环境,使得开发者可以使用C#...
C#压缩算法是一种在.NET框架下实现数据压缩的技术,它主要涉及到C#编程语言和一些常用的压缩库,如SharpZlib和SharpZipLib。这些库提供了API接口,使得开发人员可以方便地在C#应用程序中集成数据压缩和解压缩功能。 ...
从提供的压缩包子文件的文件名称列表中,我们可以分析出以下几个关键部分: 1. **Quartz.build**:这可能是构建脚本或配置文件,用于构建整个Quartz.NET项目,可能包含了编译、打包和测试的指令。 2. **Quartz....
2. **MVC(Model-View-Controller)**:另一种常见的ASP.NET开发模式,它将应用逻辑分为三个部分,有利于代码组织和测试。 3. **数据库设计**:可能会使用SQL Server或其他支持.NET的数据库,学习如何创建数据库...