常用的压缩格式rar、zip和7z

1在C#.NET中压缩解压rar文件

rar格式是有专利文件的商业压缩格式,不开源,对解码算法公开,但压缩算法私有,需付费,如需在商业软件中使用rar格式进行解压缩,需为rar付费,rar在国内很流行是由于盗版的存在,正因为算法是不开源的,所以压缩rar并没有第三方的开源库可供选择,只能另寻出路。针对rar的解压缩通常使用winrar,几乎每台机器都安装了winrar,对于普通用户来说它提供基于用户界面的解压缩方式,另外,它也提供基于命令行的解压缩方式,这为我们在程序中解压缩rar格式提供了一个入口,我们可以在C#程序中调用rar的命令行程序实现解压缩,思路:
1、判断注册表确认用户机器是否安装winrar程序,如果安装取回winrar安装目录。
2、创建一个命令行执行进程。
3、通过winrar的命令行参数实现解压缩。
首先我们通过下面的代码判断用户计算机是否安装了winrar压缩工具。
如果已经安装winrar可通过如下代码返回winrar的安装位置,未安装则返回空字符串,最后并关闭注册表:

public static string ExistsWinRar()
{string result = string.Empty;string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key);if (registryKey != null){result = registryKey.GetValue("").ToString();}registryKey.Close();return result;
}
/// <summary>
/// 将格式为rar的压缩文件解压到指定的目录
/// </summary>
/// <param name="rarFileName">要解压rar文件的路径</param>
/// <param name="saveDir">解压后要保存到的目录</param>
public static void DeCompressRar(string rarFileName, string saveDir)
{string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(regKey);string winrarPath = registryKey.GetValue("").ToString();registryKey.Close();string winrarDir = System.IO.Path.GetDirectoryName(winrarPath);String commandOptions = string.Format("x {0} {1} -y", rarFileName, saveDir);ProcessStartInfo processStartInfo = new ProcessStartInfo();processStartInfo.FileName = System.IO.Path.Combine(winrarDir, "rar.exe");processStartInfo.Arguments = commandOptions;processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;Process process = new Process();process.StartInfo = processStartInfo;process.Start();process.WaitForExit();process.Close();
}
/// <summary>
/// 将目录和文件压缩为rar格式并保存到指定的目录
/// </summary>
/// <param name="soruceDir">要压缩的文件夹目录</param>
/// <param name="rarFileName">压缩后的rar保存路径</param>
public static void CompressRar(string soruceDir, string rarFileName)
{string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(regKey);string winrarPath = registryKey.GetValue("").ToString();registryKey.Close();string winrarDir = System.IO.Path.GetDirectoryName(winrarPath);String commandOptions = string.Format("a {0} {1} -r", rarFileName, soruceDir);ProcessStartInfo processStartInfo = new ProcessStartInfo();processStartInfo.FileName = System.IO.Path.Combine(winrarDir, "rar.exe");processStartInfo.Arguments = commandOptions;processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;Process process = new Process();process.StartInfo = processStartInfo;process.Start();process.WaitForExit();process.Close();
}

2.在C#.NET中压缩解压zip文件

zip是免费开源的压缩格式,windows平台自带zip压缩和解压工具,由于算法开源,所以基于zip的解压缩开源库也很多,SharpZipLib是一个很不错的C#库,它能够解压缩zip、gzip和tar格式的文件,首先下载SharpZipLib解压后,在项目中引用ICSharpCode.SharpZLib.dll程序集即可,下面是一些关于SharpZipLib压缩和解压的示例。

ZipOutputStream zipOutStream = new ZipOutputStream(File.Create("my.zip"));
CreateFileZipEntry(zipOutStream, "file1.txt", "file1.txt");
CreateFileZipEntry(zipOutStream, @"folder1\folder2\folder3\file2.txt", "file2.txt");
zipOutStream.Close();
Directory.CreateDirectory("ZipOutPut");ZipInputStream zipInputStream = new ZipInputStream(File.Open("my.zip", FileMode.Open));ZipEntry zipEntryFromZippedFile = zipInputStream.GetNextEntry();while (zipEntryFromZippedFile != null){if (zipEntryFromZippedFile.IsFile){FileInfo fInfo = new FileInfo(string.Format("ZipOutPut\\{0}", zipEntryFromZippedFile.Name));if (!fInfo.Directory.Exists) fInfo.Directory.Create();FileStream file = fInfo.Create();byte[] bufferFromZip = new byte[zipInputStream.Length];zipInputStream.Read(bufferFromZip, 0, bufferFromZip.Length);file.Write(bufferFromZip, 0, bufferFromZip.Length);file.Close();}zipEntryFromZippedFile = zipInputStream.GetNextEntry();}zipInputStream.Close();

3.使用.NET中自带的类解压缩zip文件

微软在System.IO.Compression命名空间有一些关于文件解压缩的类,如果只是希望压缩解压zip和gzip格式的文件,是个不错的选择,在NET Framework 4.5框架中,原生System.IO.Compression.FileSystem.dll程序集中新增了一个名为ZipFile的类,,让压缩和解压zip文件变得更简单,ZipFile的使用示例如下:

System.IO.Compression.ZipFile.CreateFromDirectory(@"e:\test", @"e:\test\test.zip"); //压缩
System.IO.Compression.ZipFile.ExtractToDirectory(@"e:\test\test.zip", @"e:\test"); //解压

4.支持格式最多的C#解压缩开源库

名为SharpCompress的C#框架被开源,可以在搜索引擎中找到SharpCompress框架的开源代码,它支持:rar 7zip, zip, tar, tzip和bzip2格式的压缩和解压,下面的示例直接从rar格式文件读取并解压文件。

using (Stream stream = File.OpenRead(@"C:\Code\sharpcompress.rar"))
{var reader = ReaderFactory.Open(stream);while (reader.MoveToNextEntry()){if (!reader.Entry.IsDirectory){Console.WriteLine(reader.Entry.FilePath);reader.WriteEntryToDirectory(@"C:\temp");}}
}

5.总结

关于rar和zip格式相比,rar的压缩率比zip要高,而且支持分卷压缩,但rar是商业软件,需要付费,zip压缩率不如rar那么高,但开源免费,7zip格式开源免费,压缩率较为满意,这些压缩格式各有优势,就微软平台和一些开源平台来说,一般采用的都是zip格式,因为它更容易通过编程的方式实现,比rar更加可靠。

转自:http://blog.csdn.net/moonpure/article/details/46563017

C#解压zip和rar文件相关推荐

  1. php 判断是rar或是zip文件,PHP解压zip和rar文件的方法介绍

    PHP解压zip和rar文件的方法介绍?实例代码举例php语言如何解压文件.php开发经常会遇到解压zip和rar文件,以下方法供大家参考,判断文件是zip类型的还是rar类型,调用相关组件执行解压缩 ...

  2. Linux 下载安装 rar 并解压rar压缩包(Linux下如何解压.zip和.rar文件)

    Linux下如何解压.zip和.rar文件,对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于zip linux下提供了zip和unzip程序,zip是 ...

  3. 使用Python解压zip、rar文件

    解压 zip 文件 基本解压操作 import zipfile''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...

  4. Ubuntu 14 如何解压 .zip、.rar 文件

    .zip 和 .rar 是Windows下常用的压缩文件,在Ubuntu中如何解压. [解压.zip文件] Ubuntu中貌似已经安装了unzip软件,解压命令如下: unzip ./FileName ...

  5. python 解压文件 已存在_python解压zip和rar文件问题以及解决方法

    写此文的目的是记录自己的学习过程,一些经过,遇到问题以及解决问题的方法,存放在这里,方便自己以后复习以及自己的一些总结,如果此文对你有帮助,请随时联系我微信:wangzhixiong1533 ◆ ◆ ...

  6. linux 压缩7z文件夹,Linux 下压缩与解压.zip和.rar及.7z文件

    Linux 下压缩与解压.zip和.rar及.7z文件对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程 ...

  7. 解压zip、rar、gz格式文件

    rar解压版本:需要使用0.7,其他版本尝试了,不行,而且rar压缩的时候,也需要指定rar4,高版本不支持 <!--解压rar压缩--><dependency><gro ...

  8. python 解压zip 慢_Python解压ZIP、RAR等常用压缩格式的方法

    解压大杀器 首先祭出可以应对多种压缩包格式的python库:patool.如果平时只用基本的解压.打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择. pato ...

  9. java解压zip与rar

    这两天,因为项目需要,涉及到文件夹的上传,想了很久,在网上也找了一些资料,都没有什么很好的办法,都是用插件之类的解决,后面就想到了上传压缩 文件,说到压缩文件,自然就会遇到,文件的解压缩问题,大家都知 ...

  10. linux解压7z文件,Linux 下压缩与解压.zip和.rar及.7z文件

    对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序.它们的参数 ...

最新文章

  1. python文件操作2:在指定目录下查找指定后缀名的文件
  2. 关于spring mybateis 定义resultType=java.util.HashMap
  3. 缓存行cache line概述
  4. Matlab常用的11个快捷键【注释、自动对齐、跳转指定行、设置标签and断点、自动补全、历史命令、强制中断运行、退出、单行注释转多行】
  5. hadoop 启动or运行mr错误
  6. Java提高—对象克隆(复制)/对象属性拷贝
  7. LeetCode 1953. 你可以工作的最大周数
  8. Linux网络编程一步一步学-UDP方式点对点通讯
  9. topsis综合评价法_DRG如何评价临床医师绩效——以肿瘤科为例
  10. pySpark | pySpark.Dataframe使用的坑 与 经历
  11. qt5使用触屏 偶尔没响应_【喂你播】三星6亿像素传感器曝光;苹果承认部分iPhone 11存在触屏缺陷...
  12. vscode写java快捷插件(Extension Pack for Java)
  13. 联想硬盘保护系统密码读取
  14. anaconda怎么切换目录_Anaconda更改工作路径
  15. 已知两数的最大公因数和最小公倍数
  16. 记录第二次进行的助教培训-评分
  17. 华为高薪吸纳“天才” !任正非:进来华为,就没有“天才少年”这个名词了
  18. 国务院智囊建议全面放开二胎:越晚越被动
  19. Kotlin入门:中?和!!的区别
  20. vue+vant+springboot+netty仿照微信聊天和朋友圈

热门文章

  1. 9种常见的反爬虫策略思路
  2. HTML怎么引入字体包中的字体
  3. C#—软件注册与注册机
  4. zktime 协议_zktime5.0考勤管理系统使用说明书(1.2版).pdf
  5. UG应用标准库遇到 当前搜索选项查文件失败,部件已卸载
  6. 打开shp文件最直接的思路
  7. Excel·VBA考勤打卡记录数据整理
  8. CR渲染器全景图如何渲染颜色通道_3d Max设计师们的“偷懒”小技巧——云渲染篇...
  9. VMware虚拟机XP系统安装
  10. 动手学Pytorch深度学习建模与应用