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

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命令行压缩。

 

 

[CTO俱乐部第103期] 高德和四维图新技术高管谈地图导航的发展与挑战 Java 7爆最新漏洞,10年前的攻击手法仍有效 Twitter联合创始人Biz Stone谈Facebook用户体验 提倡零广告 英雄会:企业的人才漏斗 开发者的武林大会 一次错误估算带来的启示 苹果开发者中心被黑:开发者信息或被窃取 SIM卡加密存漏洞 将影响数亿计的手机用户 搜狗茹立云:探索引擎产品落地 浏览器+搜索模式会成主流吗? 大势所趋,IBM Acme Air至少使用Netflix的5个开源工具 【观察】跨越“朦胧期”的云计算:产业、核心技术、生态圈以及突破点 Rovio Account:平台化之路修成正果 甲骨文总裁马克•赫德采访实录:用软硬件集成一体机打垮对手 如何一步一步打造高可扩展性的应用程序? 用Java编程,请保持简洁! 从安全隐患带来的商机来看,Hadoop同样很美 三年增四倍:如今谷歌服务占北美互联网流量四分之一 决战低功耗?Intel明年推低功耗Xeon处理器 在软件架构上增加新功能的注意事项 90后的代码界“女神”李雪:在编程中找到自己的“灵魂” 大数据之路不乏荆棘,然则其中的机遇却高于一切 iPhone销量令人意外:苹果Q3财季净利69亿美元 同比下滑 励志:12位早起的IT大佬们让小伙伴们都惊呆了 独家:苹果5周年限免神作,BADLAND开发者访谈 10亿次订阅!苹果Podcast的里程碑 免费利器Unity 4.2正式发布 支持WP8、Win8和BB10 SDCC 2013:Pinterest首位中国籍工程师两场演讲议题确定 甲骨文公布中国首届“Duke选择奖”名单 Moco、X幻想、开源中国获奖 直接拿来用,10个PHP代码片段 编程的未来 数据将成为主角 OpenCL 2.0发布,带来更强悍的异构计算能力 代码审查方式大调查 辅助工具居首(信息图) 怎样更改CListCtrl中内嵌的CHeadCtrl控件的风格? 有关TChart的问题? 我怎样才能获得插入语句的ID值? 求帮助数组的问题 给分100 紧急求救 在DELPHI里执行ORACLE存储过程出错??? 当按照书名查询时,系统提示没有该索引:no index with 'bookname' field.何故 CorelDram教程碟不能播放怪的问题!! 如何在vb調用SQL存儲過程,并能得到返回的參數值. 哪位大侠帮帮忙呀!! 用CString的Find(LPCTSTR pstr,int nStart),pstr有没有通配符,急!!!!! 一个XP与2000的共享问题 打印问题,请各位提点建议。 DBA的缺省密码---【在线等】 错误:"参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。" 产生原因 免费100m asp 空间 求救,如何打开一个USB设备,CreateFile吗?请具体些 在线求救 谁是最可恨的人? 如何将本页设为只能是 target="_top" 谁有格斗游戏的源码,设计资料! 三人合作共同开发一网站,现需页面设计,有意者留下EMAIL 怎样用C#把窗口菜单和按钮做成象VS.NET中的平面菜单和工具栏上的平面按钮? 为什么在MMC中新建SQLSERVER注册总是出现超时已过期的错误? 這樣定義宏是什么意思:#define LIBCMD(givenfunction) \? ===这样的SQL在ORACLE 怎么执行不了 一个WIN2000与WINXP的共享问题 如何将一个CBitmap存为BMP文件? 在directshow中,如何实现像大部分播放器那样的“快进”功能? 较难问题--IE6不能启用cookie? 如何修改group里的数据排序方式? 如何写动态SQL语句??? 怎样让select元素不能修改? 谁用过微软的tts??? 郁闷......呀,偶MM说接吻觉得恶心!!!! 请教高手,本人想请教通过数值如:12.5转换成UNICODE的问题,急!!!在线等待 我现在的密码不好记,如何更改密码? 请教大侠;RMI问题 ASP+SQL server免 费空间哪里有100分送给你. 有没有人用过Virtual PC这个软件的啊???快救命啊!!!!!正等着用啊!!!! 有谁知道在上海周边有哪些电脑配件的厂家,如机箱.主板.显示器之类的? 关于“汇总数据”的问题 请尽快帮我解决病毒问题 菜鸟6000分依次提问ORACLE问题,第一个:大虾给我个函数里建虚表并插入数据的例子 EJB使用大数据量的问题 怎样用DirectShow写一个RenderFilter & SourceFilter linux下的应用程序,界面语言问题 VSS中的Pin和Unpin有什么用?在什么情况下使用? 一个WINXP与WIN2000的共享问题(急) 我想问一下,能不能用sql sever2000 开发桌面型的mis系统 我想监测某个端口的通信主要是 TCP 端口,不想写网卡过滤驱动,各位有什么高招? 下列条件哪个会使色谱分离度降低A 增加固定液含量 B 减慢进样速度 C 增加气化室温度 D增加检测器温度 三洋投影机更换完灯泡为何不亮?三洋投影机更换完灯泡后,显示更换灯泡的指示灯(橙色)为什么还是一下一下的闪烁,机子也不亮,灯泡没有问题,试过可能亮的,机子是PLC-XT3500C, 俚语有种类吗 pCAMBIA2301g载体有GUS基因吗 急,我们家的投影机灯泡突然不亮了,怎么回事啊,是不是灯泡坏了啊?三洋投影机 简述热力学三大定律(第一,第二,第三定律)的建立过程 pBI121载体上的 GUS基因是什么大虾们.请问哈pBI121载体上的 GUS基因是什么,稍微详细一点点哈,.有什么现实的意义。 一种青蛙,眼睛会喷射红色的液体 英语俚语的种类有多少种? 1.能不能说氕是氘的同位素?1.\x05能不能说氕是氘的同位素?我认为应该是护为同位素,要说也只能说氕氘氚是氢的同位素.诸位认为呢?2.25℃,ph=8的NaOH溶液和NH3H2O溶液中,由水电离出的c(OH-)不相 梦到红青蛙梦到自己和朋友站在水塘边上 丹水塘里都是泥 那些青蛙就在泥下边 之后就蹦上来了 开始看是大青蛙 侯来就变红的了 我很害怕可以根据我这个梦帮我解答吗? 乙烷中,其一氯代物有2种,则它的结构简式为:丙烷的二氯代物有____种,其结构简式分别为: 当军人有什么好处帮帮忙啊越多越好啊 手被红青蛙尿喷到手了下午上课时在教室后面跳出来了一只红色青蛙,大脚的.然后我就被它的尿喷到手了,要是弄到眼睛我就要瞎掉了!不知道那是什么青蛙, 氧化铝球磨前烘料有什么作用 英语翻译THE AMERICAN M-5 STUART EASILY OUTMATCHES THE RENAULT R35 IN ALL ASPECTS,EXCEPT ARMAMENT.THE SIMILAR 37 MILLIMETER MAIN GUNS ARE A DRAW.BUT AT SIXTEEN AND A HALF TONS,THE STUART OUTWEIGHS THE R35,AND IT’S MUCH FASTER,WITH A SPEED OF 36 为什么莫尔法测定NaCl时要使用铬酸钾作指示剂? 【求助】氧化铝纯度分析应该用哪种检测? 1mol的CH2=CH2与cl2完全反应加成后,再与cl2彻底取代,两过程共消耗cl2的物质的量为?(请给出给出, 铁丝放在硫酸铝溶液中加热产生反应的问题?铁丝放在硫酸铝溶液中,加热产生气泡,并在铁丝表面生成深红色固体附着物,请问这产生的气体是什么?这次反应生成了什么? 这只青蛙是什么品种?在田地里抓的青蛙.也有癞蛤蟆. 小时候他们说 抓癞蛤蟆身上长赖.吓得我都不敢抓?刚才抓了3只青蛙有一只不知道是什么品种 谁知道能告诉我啊? 谁知道核酸的显色剂是什么核酸的显色剂 我听说的是甲基氯和比罗红混合 就可以看到DNA和RNA,但是上网查不到比罗红!可能听错了吧 明矾溶液和镀锌的铁丝反应吗如题那和不镀锌的呢?为什么? 请问这个青蛙是什么品种这是爸爸给我从朋友那里要的小青蛙,因为我喜欢动物,但是我从来没见过这样的青蛙,不知道它们吃什么,还有应该注意什么比如水的清洁度,多长时间换一次水,它们怕 氢负离子形成的条件?怎样做可以形成氢负离子? 形容心地纯洁,像水一样清澈的是什么词 聚酰胺的海关编码是什么,就是指BOPA薄膜. 什么是负离子技术,负离子有何作用 什么是形容人心像明净的水一样纯洁? 五大强酸有哪些? 氢元素有阴离子么RT 形容心地纯洁,像清澈的水一般 是什么词语? 青蛙有多少种类 硫与氢或氧能生成什么负一价双原子阴离子 哪有海水养虾的基本知识?3Q我哥哥想在青岛营海养虾,对养虾知识一点都不懂.请问谁知道哪有海水养虾和淡水养虾的基本知识,入门级,最好是全套的,包括注意事项等等. 五大强酸都是什么? H,氢分子,氢阳离子,氢阴离子的共同点是什么 海水浓度高养虾好吃吗 青蛙的种类叫什么 PCR试剂有哪几类,怎样区分 _______:不分明,不清楚._______:形容心地纯洁,像清澈的水一般._______:_______:不分明,不清楚._______:形容心地纯洁,像清澈的水一般._______:(神志或视觉)模糊不清.蹭财富值的滚蛋→_→! 云图视讯投影仪lamp灯亮代表什么意思? 请问你们知道PCR仪有多少种类吗?我想知道PCR仪的种类的所有的进品品牌, 均一、稳定的液体都是溶液.什么是液体但不是溶液. 青蛙的种类 多重种类特异性PCR需要注意什么?请问多重种类特异性PCR与普通的PCR,在各因素用量上 有什么区别吗?为什么通用引物可以扩增出条带,特异性引物却没有扩增出条带?在此先谢过! 验证铜铁铝的活动顺序,应用哪种溶液 青蛙有些什么种类啊. 霍尼韦尔 GUS 霍尼韦尔 的硬件和软件系统分别是哪些 我记得有个R680, 进口梯度PCR仪哪里买? O18是O16的同位素 那么O16是O18的同位素吗 生物分子学中GUS什么意思 如何提高气相色谱的分离度 热力学里,能用n和2个变量来描述整个系统的前提是什么?如题,请问在什么情况下能仅用n和2变量来描述整个系统(即其他变量都可由其导出) 能够溶解鸡蛋壳和打磨过的铁丝的溶液是什么? jesusxxxDJscocolastjanhavebeforemm DDRms,Gus翻译 珊瑚礁海岸有哪几种类型?它们之间有何种成生联系? 想求一个GUS基因的引物序列?一般扩GUS时是扩全长还是其中一段序列? 提高气相色谱分离度的方法有哪些? 公路实验中,最大干密度指的是什么 “豆荚旅馆”亮相多伦多欧盟讨伐美国窃听行径中国品牌闪耀约堡国际车展日本禁核,但愿不是作秀葡萄牙数千民众游行抗议2014年预算土耳其敦促安理会解决叙利亚难民危机洪水袭击“印度米碗”伊朗外长与联合国-阿盟特别代表呼吁政孟加拉国总理呼吁反对党取消全国大罢工奥地利总理国庆讲话告诫不忘纳粹历史巴勒斯坦呼吁共同抵制以扩建犹太人定居印度东部洪灾死亡人数升至45人李娜打入总决赛排名进Top3 创亚洲河南济源一路段7公里6个“收费站”专刘云山:教育实践活动整改工作要准、狠白岩松惋惜恒大未能锁定胜局:首尔死刑亚冠决赛首回合恒大2-2首尔 穆里奇中国科学家成功研发人感染H7N9禽流宗庆后语出惊人:中国不能再造房子了李克强在中南海紫光阁会见东盟十国经贸捅死医生的连恩青烦躁时砸东西打母亲 西班牙人年末谨慎涨消费刘延东会见美国芝加哥市市长南苏丹暴力冲突致逾500人丧生 美英球员前妻诈骗邹凯等奥运冠军数千万 被大连通报9起违反中央八项规定精神的典俄第二艘“北风之神”级战略核潜艇正式自主招生的疗伤效应不能止于“人大”高清:海南欢乐节海口观澜湖分会场美景中国拟修法加强军事设施保护在俄罗斯遇袭的中国商人系“一家人”张志军:台商可从大陆经济深化改革中寻台湾失业情势趋和缓 劳动市场维持稳定杨秋兴:南台湾选战艰辛 不会积极争取民进党的意识形态死结困住台湾陕西6岁“碎脸娃娃”成功拼脸刘延东会见美国芝加哥市市长伊曼纽尔郑州煤电董事长孟中泽被双规 张明剑主马鞍山供电公司:提前圆满完成全年电网学者谈行诉法修改:对公职人员等的拘留海洋环境保护法等7部法律拟“一揽子”云南沧源:沐浴在兴边富民的阳光下
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘