说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

c#对rar或zip文件进行压缩解压缩

HTML文档下载 WORD文档下载 PDF文档下载
介绍了压缩解压的两种方式:方法一、调用WinRAR方式,方法二、使用C#压缩解压库

 

方法一、调用WinRAR方式

此部分内容参考自:http://hi.baidu.com/dukey/item/dd91b30c47f0d07ebee97ea5

 

/// <summary>/// 利用 WinRAR 进行压缩/// </summary>/// <param name="path">将要被压缩的文件夹(绝对路径)</param>/// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>/// <param name="rarName">压缩文件的名称(包括后缀)</param>/// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>public bool RAR(string path, string rarPath, string rarName){	bool flag = false;	string rarexe;       //WinRAR.exe 的完整路径	RegistryKey regkey;  //注册表键	Object regvalue;     //键值	string cmd;          //WinRAR 命令参数	ProcessStartInfo startinfo;	Process process;	try	{		regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");		regvalue = regkey.GetValue("");  // 键值为 "d:\Program Files\WinRAR\WinRAR.exe" "%1"		rarexe = regvalue.ToString();    		regkey.Close();		rarexe = rarexe.Substring(1, rarexe.Length - 7);  // d:\Program Files\WinRAR\WinRAR.exe		Directory.CreateDirectory(path);		path = "\"" + path + "\"";		//压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)		cmd = string.Format("a {0} {1} -ep1 -o+ -inul -r -ibck",							rarName,							path);		startinfo = new ProcessStartInfo();		startinfo.FileName = rarexe;		startinfo.Arguments = cmd;                          //设置命令参数		startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口		startinfo.WorkingDirectory = rarPath;		process = new Process();		process.StartInfo = startinfo;		process.Start();		process.WaitForExit(); //无限期等待进程 winrar.exe 退出		if (process.HasExited)		{			flag = true;		}		process.Close();	}	catch (Exception e)	{		throw e;	}	return flag;}/// <summary>/// 利用 WinRAR 进行解压缩/// </summary>/// <param name="path">文件解压路径(绝对)</param>/// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param>/// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param>/// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns>public bool UnRAR(string path, string rarPath, string rarName){	bool flag = false;	string rarexe;	RegistryKey regkey;	Object regvalue;	string cmd;	ProcessStartInfo startinfo;	Process process;	try	{		regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");		regvalue = regkey.GetValue("");		rarexe = regvalue.ToString();		regkey.Close();		rarexe = rarexe.Substring(1, rarexe.Length - 7);		Directory.CreateDirectory(path);		//解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹		cmd = string.Format("x {0} {1} -y",							rarName,							path);		startinfo = new ProcessStartInfo();		startinfo.FileName = rarexe;		startinfo.Arguments = cmd;		startinfo.WindowStyle = ProcessWindowStyle.Hidden;		startinfo.WorkingDirectory = rarPath;		process = new Process();		process.StartInfo = startinfo;		process.Start();		process.WaitForExit();		if (process.HasExited)		{			flag = true;		}		process.Close();	}	catch (Exception e)	{		throw e;	}	return flag;}

 

注意:如果路径中有空格(如:D:\Program Files\)的话压缩解压就会出现问题,需要在path 和 rarName 上加双引号,如: path = "\"" + path + "\""; 

 

附:RAR参数:

一、压缩命令

 

1、常用压缩参数

rar a -ep1 -o+ -inul -r -ibck temp.rar "c:\test\*.*"

 

ep1:排除基准文件夹,不然压缩包会包含待压缩文件夹所在的完整路径

o+:覆盖已经存在的文件

inul:禁止出错信息

r:连同子文件夹操作

ibck:后台模式运行

 

 

2、将temp.txt压缩为temp.rar: rar a temp.rar temp.txt 

3、将当前目录下所有文件压缩到temp.rar: rar a temp.rar *.* 

4、将当前目录下所有文件及其所有子目录压缩到temp.rar: rar a temp.rar *.* -r 

5、将当前目录下所有文件及其所有子目录压缩到temp.rar,并加上密码123rar a temp.rar *.* -r -p123

 

二、解压命令

1、将temp.rar解压到c:\temp目录rar e temp.rar c:\temprar e *.rar c:\temp(支持批量操作) 

2、将temp.rar解压到c:\temp目录,并且解压后的目录结构和temp.rar中的目录结构一

 

压缩目录test及其子目录的文件内容 

Wzzip test.zip test -r -P 

WINRAR A test.rar test -r 

 

删除压缩包中的*.txt文件 

Wzzip test.zip *.txt -d 

WinRAR d test.rar *.txt 

 

刷新压缩包中的文件,即添加已经存在于压缩包中但更新的文件 

Wzzip test.zip test -f 

Winrar f test.rar test 

 

更新压缩包中的文件,即添加已经存在于压缩包中但更新的文件以及新文件 

Wzzip test.zip test -u 

Winrar u test.rar test 

 

移动文件到压缩包,即添加文件到压缩包后再删除被压缩的文件 

Wzzip test.zip -r -P -m 

Winrar m test.rar test -r 

 

添加全部 *.exe 文件到压缩文件,但排除有 a或b 

开头名称的文件 

Wzzip test *.exe -xf*.* -xb*.* 

WinRAR a test *.exe -xf*.* -xb*.* 

 

加密码进行压缩 

Wzzip test.zip test 

-s123。注意密码是大小写敏感的。在图形界面下打开带密码的压缩文件,会看到+号标记(附图1)。 

WINRAR A test.rar test -p123 

-r。注意密码是大小写敏感的。在图形界面下打开带密码的压缩文件,会看到*号标记(附图2)。 

 

按名字排序、以简要方式列表显示压缩包文件 

Wzzip test.zip -vbn 

Rar l test.rar 

 

锁定压缩包,即防止未来对压缩包的任何修改 

无对应命令 

Winrar k test.rar 

 

 

创建360kb大小的分卷压缩包 

无对应命令 

Winrar a -v360 test 

 

 

带子目录信息解压缩文件 

Wzunzip test -d 

Winrar x test -r 

 

不带子目录信息解压缩文件 

Wzunzip test 

Winrar e test 

 

解压缩文件到指定目录,如果目录不存在,自动创建 

Wzunzip test newfolder 

Winrar x test newfolder 

 

解压缩文件并确认覆盖文件 

Wzunzip test -y 

Winrar x test -y 

 

解压缩特定文件 

Wzunzip test *.txt 

Winrar x test *.txt 

 

解压缩现有文件的更新文件 

Wzunzip test -f 

Winrar x test -f 

 

解压缩现有文件的更新文件及新文件 

Wzunzip test -n 

Winrar x test -u 

 

批量解压缩文件 

Wzunzip *.zip 

WinRAR e *.rar

 

方法二、使用C#压缩解压库

SharpCompress是一个开源的压缩解压库,可以对RAR,7Zip,Zip,Tar,GZip,BZip2进行处理。

官方网址:http://sharpcompress.codeplex.com/

 

使用例子:

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", ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);		}	}}

 

 

 

ZIP文件解压缩:

 

 

var archive = ArchiveFactory.Open(@"C:\Code\sharpcompress\TestArchives\sharpcompress.zip");foreach (var entry in archive.Entries){	if (!entry.IsDirectory)	{		Console.WriteLine(entry.FilePath);		entry.WriteToDirectory(@"C:\temp", ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);	}}

 

 

 

压缩为ZIP文件:

 

 

using (var archive = ZipArchive.Create()){	archive.AddAllFromDirectoryEntry(@"C:\\source");	archive.SaveTo("@C:\\new.zip");}

 

 

 

用Writer API创建ZIP文件

 

 

using (var zip = File.OpenWrite("C:\\test.zip"))using (var zipWriter = WriterFactory.Open(ArchiveType.Zip, zip)){     foreach (var filePath in filesList)     {        zipWriter.Write(Path.GetFileName(file), filePath);     }}

 

 

 

创建tar.bz2

 

 

using (Stream stream = File.OpenWrite(tarPath))using (var writer = WriterFactory.Open(ArchiveType.Tar, stream)){	writer.WriteAll(filesPath, "*", SearchOption.AllDirectories);}using (Stream stream = File.OpenWrite(tarbz2Path))using (var writer = WriterFactory.Open(ArchiveType.BZip2, stream)){	writer.Write("Tar.tar", tarPath);}

 

我们看到SharpCompress是没有压缩为rar的命令,因为所有RAR压缩文件都需要RAR作者的许可,你可以考虑压缩为zip或7zip,要不就使用WINRAR命令行压缩。

 

 

开发者的新机遇:微软生态系统打开开源大门 阻碍创新:谷歌、Facebook请求驳回抽象专利概念 Apple专利战分析:战火不停 创新不止 史上最牛独立开发者:花20美元狂赚100万美元 Twitter VS. Instagram:照片分享大战爆发 第二届“龙芯杯”中国开源软件设计大赛圆满落幕 TUP Masters第六期实录:Jeffrey Richter讲解Win8应用开发与.NET4.5 [简讯]Bootstrap 2.2.2发布 官博宣布新特性 我们正处于API的黄金时代吗? 敏捷开发的26条至理名言 12月10日:1815年首位程序员Augusta Ada出生 TOP30+应用排行榜:十一月国内外综合榜单 抱大腿:Square礼品卡服务进驻Passbook 科技创新剑指开源产业 “龙芯杯”破题自主研发 25GPU的Linux集群6小时内破解标准Windows密码 Lady Gaga与大数据的“火花” 手势才是王道:3款应用捕获3个设计灵感 YouTube的挑战者 JustinTV教你如何打造实时视频网站 黑客挟持160万用户密码 抗议联合国监管互联网 Twitter面对危机火速上线照片滤镜产品 Nike推创业孵化器:每个参与团队获2万美金 傲游发布云浏览器 支持跨终端数据同步 12个git实战建议和技巧 用友UAP产品线总设计师史周军访谈录 IE10新功能解析 支持Media Query(图) 单页Web应用或引领下一代Web新趋势? [CTO俱乐部第89期]新时代的前端开发 [多图]160台Mac mini打造的数据中心机架 是谁动了我的CPU! 欧朋CEO:GPU加速是手机浏览器的新趋势 TOP30专访:Splashtop研发中心总经理Alex Xu javascript中调用jsp 如何显示剪贴板的内容 各位前辈好.我有个关于TCP/IP协议应用的问题,请大家指点. 除了本站好象很少有人讨论日志文件的,能介绍点好的website吧(国内外均可)谢了先 用什么软件制作和修改.chm文件阿?? 问个弱问题:web服务器和数据库服务器不用同样系列的东西会有问题吗? createbitmap()里頭有五個參數,最後一個參數怎麽設置?我看了英文和中文的解釋都理解不了,誰能給個例子出來呀 如何添加自定义的ToolBar.怎样在命令菜单被check时随意显示和隐藏该工具条?急! 在线等,为什么我的代码原来可以运行,现在不可以了????TextPad 用GetCommandLine()得到的文件名是c:\test\YTEX~1.XY,而我的实际文件名是c:\test\y.txt.XY,我该怎么办? 急急急...为什么我拨号已经拨通了,但我还是打不开网页,ping各个网站也ping不通 各位前辈好.关于TCP/IP协议应用的问题,请大家指点. ***软件加密,急急急!!!请高手指教*** 寻找与CSDN类似的社区软件 谁有SCJP SL-275的原版电子版教材? 标准C程序中调用类的编译错误 access的mdb数据库如何编程知道里面含有那几个表? 谁有瑞星的升级程序,或是授权ID什么的?现在瑞星升级很烦啊!又是注册,又是授权的。 好象很少有人讨论日志文件的,能介绍点好的website吧(国内外均可)谢了先 Ghost之后,20G只剩下一个2G的C:!!!如何恢复,请指教,多谢!!! 我是初学者,问一个比较傻的问题:既然JAVA是一种纯面向对象的语言,那么为什么int i=new int()或int i=new int(1)不能通过编译?谢谢。 哪位能讲解一下,WEB服务器启动一个PHP 脚本的过程? 哪位朋友有没有做过让asp自动生成 Access数据库中的一张表 现想做一模块,主要是对股票数据在网络(包括公司内部网或是INTERNET)进行实时的发送; 关于DcomConnection的一个问题:连接局域网其他机器的应用程序服务器时“拒绝访问” 在VisData中正常通过,但在程序中不能通过,为什么 图像的小波分解和重构,模极大值算法。 师傅不在QQ,在这里吗?有个问题.//小新的徒弟. 老千,上次的那个rose下载网站,你还记得吗?偶忘了,搜索了几遍野没找到//牛虻 在VisData中正常通过但在程序中不能通过,为什么 向各位高手请教两句:tab_1.post selecttab(3) 的作用是不是向tab发送消息,消息内容是selecttab(3)?yield()是不是从消息中查找是否有相同消息,如果有则将它拿出执行? 我很莱,谁能给我简单的解释一下线程是什么?脱壳是什么? 图象资料,轻而易举30分! 和大家交流一下泛型化编程 文件拷贝的简单问题, 大家好:请问:access的mdb数据库如何编程知道里面含有那几个表? 怎样将mysql驱动加到jbuilder中,让Database pilot能认得出,高分相送 高分求教:关于ADO实现数据库!!!!!!!!!!谢谢 请问如何一次删除数据库中的所有数据? 怎么使label框透明!帮帮我! TNMUDP问题:怎样才能知道RemoteHost连接失败??? 谁有CuteFTP Pro2.0注册码?谢谢 如何进行DropDownList绑定,谢谢! 请问一个CString的问题 那个168查分台太可恶了 WIN98与WIN2000共享一个OFFICE??? 网络连接怎么检测 能把IE浏览器最大吗?俺指的是把右上最大按钮最大化? 怎么判断表单传送的整数中不能有字符,谢谢!!! 如何把我写好的说明书放到我VC++应用程序的帮助文件中? 求最容易理解,最容易上手的数据库书籍,各位老大请指教,谢谢!! 轿车流线型的设计有什么优点 带电瓶的拖拉机,电瓶开关控制正极效果好还是负极效果好? 电动车上的普通电门锁,想改成刷卡电门锁,能改怎么?能改需要怎么改, 用电磁阀控制气缸,要求突然断电气缸保持压力,重物不能掉下来,收到信号气缸松开,选用什么型号的电磁阀 电磁阀的两位五通,两位三通,单电控, 怎么区分电动车线路那些线是正极和负极线路想请问下电动车里面的线路那么多,怎么区分哪些是正极的,哪些又是负极的呢? 制造碳酸稀土会产生废气? 单电控两位五通电磁阀可以与双作用气缸在一起使用吗?之前都是用双电控电磁阀来控制双作用气缸的,单电控可以控制吗 封冻的江河水面能够承受的最大压强是7x10的5次方Pa,一辆20t的坦克能够在冰面上行驶吗? 稀土原矿收购 控制双作用气缸什么情况下用双电控两位五通电磁阀,什么情况用单电控两位五通电磁阀 请问现在的汽车都装有汽车尾气净化器么?尤其是中国有没有装. 在水平公路上,小汽车做匀速直线运动时与静止时相比较.下列说法正确的是?A.运动时在水平方向只受摩擦力作用B.运动时对地面没有压力C.运动时与地面的摩擦力小于静止时D.运动时与地面的 物理:潜水员穿上可以承受压强为4.9×10的5次方PA,潜入水中的最大深度A、5米B、50米C、500米D、5000米另外请告诉我详细计算过程 简述净化器是如何降低汽车尾气危害的 轿车在水平公路上作匀速直线运动.下列说法中正确的是A汽车受力不平衡B汽车在水平方向受力平衡,竖直方向受力不平衡C汽车在竖直方向受力平衡,水平方向受力不平衡D汽车在水平方向受力平 冬天河面结冰,一处冰层能承受的最大压强为二乘以十的四次方Pa.一个质量为40千克的人单脚面积为160平方厘米计算说明他是否可以通过冰面要具体的计算步骤 光电开关,电磁阀,继电器,气缸.接在一起用光电开关感应物体,感应到物体气缸工作,物体离开气缸停止工作回到原来位置,循环工作. (多选)如图所示,在水平公路上,小汽车做匀速直线运动时与静止时相比较.下列说法正确的是:A.运动时对地面的压力小于静止时 B.运动时对地面的压力等于静止时 C.运动时与地面的摩擦力 电动车48伏充电器 输出端 N 和L 哪个是正极? 催化式排气净化器如何降低尾气危害 一个人用力F拉一个空着的小车在水平公路上做匀速直线运动,又用力F’拉这装满货物的此小车在水平公路上做匀速直线运动,比较力F与力F’的大小 给电池充电,充电器的正极应该接电池的正极还是负极?为什么哪? 催化式排气净化器是如何降低汽车尾气污染的 如图,静止在水平路面上的小车,其支架的杆子上固定一铁球,关于杆子给铁球的力的方向,下列说法正确的是A、沿杆子 B、垂直于杆子C、竖直向上 D、沿杆子与竖直方向之间的某一方向请说明理 电动自行车充电器输出端电源正极对应电瓶的正极还是负极? 坦克车为什么要装履带? 如图所示,静止在水平路面上的小车,其支架的杆子上固定一铁球,关于杆子给铁球的力的方向,下列说法正确的是:A.沿杆子; B.垂直于杆子;C.竖直向上; D.沿杆子与竖直方向之间的某一方向. 1、光对被照物体也会产生一个压强,太阳光垂直投射到地面上对地面的压强约4.6*10的负五次方帕.我国有9...1、光对被照物体也会产生一个压强,太阳光垂直投射到地面上对地面的压强约4.6*10的 在坦克的轮子上安装履带,履带表面有凹凸不平的棱是为了 在平直的公路上,一小轿车以3方的加速度从静止开始加速,恰好有一自行车以6的速度从旁边经过同向行驶.1)在平直的公路上,一小轿车以3m/s方的加速度从静止开始加速,恰好有一自行车以6m/s的 铁匠大哥,一个气压机,用三个按纽,一个三位五通中封的电磁阀怎么控制汽缸上下和停止中间的按扭是停止的,两边分别是上和下,就是气刚上升或下降时,按停止可以在随时停止,急用, 请问怎么用220V接近开关控制油泵启动,接近开关电流很小,若用中间继电器串联控制,电流也是很大啊 汽车空调风道清洗剂和汽车冷媒管道清洗剂分别是洗哪里的?汽车风道和汽车冷媒管道分别指什么?我看市场上卖的还分什么冷媒管道清洗剂和风道清洗剂,价格还不一样,功能 上到底有什么区 某司机驾驶一辆小汽车在平直公路上以15m/s 的速度均速行驶,他突然发现正前方有一只狗受到惊吓静止在公路中央,立即刹车,刹车加速度为7.5m/s ,最后在距离小狗两米处停下 ①从刹车到停止用 我的电动车想装个底盘灯,能不能正极接在车大灯上,然后把负极接在车架上?这样行得通吗 有没有一种电磁阀可以实现通电使气缸伸出,后断电,气缸保持位置,再通电气缸后退,再断电气缸同样保持位置.循环动作.同一个电源信号. 平直公路上,一辆小车从某处由静止启动,此时恰有一货车以15m/s速度从轿车旁匀速驶过,结果轿车运动到离出发点225m时追上货车,设轿车做匀加速运动,求加速度a和追及前两车的最大距离s ,一个气压机,用三个按纽,一个三位五通中封的电磁阀怎么控制汽缸上下和停止三个按纽分别是上,下和停,怎么控制啊,急用,谢谢啦手不能放在按纽上要点动上按停时它才停要不要用继电器啊? 如果双线圈电磁阀,两个线圈同时都有电,电磁阀控制的气缸会是什么情况 求电磁阀控制气缸线路图 电动车充电器N是正极L是负极吗? 碳酸镧咀嚼片上海哪有卖 多路电磁阀的工作原理是怎样的,能否用来控制气缸的直线进给量?那请问一下楼上,你们现在所用的电磁阀能否控制气缸的进给量?直线精度是多少?此精度与什么有关?谢谢 使用五位五通电磁阀控制气缸方法,气缸在中途停止3次,用三位五通中位封闭型电磁阀,用普通气缸设计可行吗 为什么汽车在高速行驶时对地面的压力小于静止时对地面的压力 在平直公路上,一辆小轿车以3m/s^2的加速度从静止开始加速,恰好有一辆自行车以6m/s速度从旁边经过同向行驶(1)汽车从开动到追上自行车之前经多长时间两者相距最远?最远相距多少?(2)什么时 1.2x10的四次方Pa的物理意义是() 汽车高速行驶时对地面的压力小于静止时对地面的压力.为什么? 三位五通电磁阀实现气缸点动我这样控制了,但只能控制一边点动,另外一个方向按一下开关气缸就自己跑到底了 1.0X10的五次方Pa的物理意义是 用一个电磁阀怎样控制汽缸动作 一民中学生对地面的压强约为多少帕斯卡 1.2乘10的六次方Pa的物理意义是每平方厘米的受力面积上所受压力为( )N 我有稀土精矿和原矿,请问有谁要 电动车过载保护开关(坐椅下的那个开关)应该接在电池的正极上还是负极上? 用脚踏开关和继电器能控制电磁阀收缩吗?意思是用脚踩一下汽缸出来,在踩一下汽缸回了是用电的啊 怎么存放混合碳酸稀土? 一个正极一个负极和一个拉线开关,怎么接才能让开关控制灯泡 电动车电门锁 红线是正极 黑线是负极 连在一起会怎样
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn