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

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

 

 

Google Play将逐步移除广告拦截应用 Shapeways公司开放API 3D打印时代来临 37signal设计师眼中的iOS与Android系统 VMware/Oracle向公有云拓展生态系统 AWS“山寨”技术伙伴创意与产品,是自我完善还是杀鸡取卵? 苹果发布OS X 10.8.3 新版Boot Camp可支持Windows 8 恭喜!麻省理工两密码学教授获2012图灵奖 Rovio的逆袭,发布首款RPG游戏“克鲁德一家” 百会呼吁微软提供合法经营Office&#160;365的相关证明 谁说Vim不是IDE?(四) RDS升级:单DB实例最高可获得3TB存储和3万IOPS 移动周报:“先验证,后开发”的App开发必杀技 Supercell首席执行官谈公司运营理念 SwiftKey:Galaxy S4输入法背后的开发团队 前IE团队领导:IE是如何走向衰败的 谷歌更新BigQuery 允许在其中加入大型数据集 初创公司Spiral Genetics:超越现有DNA序列分析平台40倍速 六大开源监测工具 你用过哪个? TUP第28期:Intel 微软 Yahoo的大数据实践 惊变14天,从“小白”到上架App Store商店 “今日头条”CEO张一鸣:我是爱冒险的技术宅 OpenStack基金会COO Mark Collier:2014年将超越AWS Evernote更新Android SDK:新增商务服务并拆分“印象笔记” 主流编译器对C++11的支持现状比较 GCC 4.8发布,提升对C++11的支持 英国政府下令首选开源软件 为何美国IaaS收购被引爆?基于IaaS的四个误解和四个猜想 Kinect SDK v1.7迎来重大更新 如何激励同事编写单元测试? 谷歌GCE vs. 亚马逊EC2:快源于谷歌本有的底蕴 不要责怪开源技术 它是无辜的 软件过来人为小弟指点~~ bmp to ico 如何打开控制面板 高分求教,我爱上了兄弟的女朋友,我该怎么办?(100分) 求助:在首次适应算法和最佳适应算法中,分区分配和分区回收的c语言实现。 同在一个城市,呼吸着同样的空气,都为这老板的几块大洋打拼,蓦然回首才知道已经几年了,也该为自已的未来思考一下了。。。 请问有关两个宏 bmp to ico 硬盘无法访问的问题,急!!!估计是被黑了 ISA2000中的问题,特急,在线求助 处理窗口关闭时的动作? 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 请问不通过Image控件如何用直接用DC来显示一个BMP?? 请问现在数据库开发技术有哪些?大致情况? 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 请问汇编用什么编译器最好啊? 有什么可以下的电影啊,提供网址,谢谢 下午闷啊:( 怎样让字体自动适应分辨率 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) RowCount属性怎么用 VCL派生类的属性发布问题,请高手指教 中国能否成为世界第一? 有关cisco路由器上copy子集的疑问 怎样将msn的email用outlook express收到本地! 请告知msn的 pop smtp服务器 如何动态画出函数的图象? 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 有创意的T恤~~ Transaction not connected! 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 高手求救 aspnetnemu注册吗 陨落雕老弟昨日开始中考,祝福他,放分! installshield打包时可以加入密码吗? 救命! 怎么在WM_DRAWITEM自画LISTVIEW? 有关txt文件操作的问题? 一个很奇怪的问题,高手请看, 马上给分 那里有更多的skinengine换肤文件? 奇怪的问题,高手请看,马上给分! 怎样给一个OLE控件其内置的事件编写脚本? 请问各位能否将一个VF的数据库方便的转为ACCESS数据库 如何关联一个扩展名到我的程序? 我有一个备注memo的字段,想更新?如何进行? www.ipowerweb.com 的主机怎么样? 高数、线性代数与程序员!!! Sworddx,补分给你 怎么做定时 这个listctrl问题怎么老没有人回答我?????? TQuery为什么没有这个属性? 长2.3m深度0.4m的衣柜,做平开门大概要多少钱?用细木工板,刷清漆.在南阳这边. 你的电子游戏在梳妆台上吗?不,没有 英语翻译 以人为镜 可以知得失矣的意思 小学语文写物作文的注意事项及写法 把“网络购物平台”翻译成英文 谁能告诉我”以人为镜可以知得失矣”的意思?考卷上的,想看看答的对不对 为什么甲午中日战争失败而朝鲜战争却胜利 .“网络科创平台”英文应该怎么去翻译...做Logo需要的... 有四种一元酸HA,HB,HC,HD.四种一元酸HA、HB、HC、HD,已知:①相同的温度下pH值相同的四种溶液中,HC的物质的量浓度最小;②相同温度相同物质的量浓度的HB、HD溶液中,HB的pH值大于HD;③相同温度下相 成语丢什么落什么 7个 请翻译:利用互联网这个平台 以铜镜可以正衣冠,以古为镜可以见兴衰,以人为镜可以知得失矣是什么意思 抗美援朝战争和甲午中日战争中国都以援助朝鲜的战略方式卷入战争的为啥甲午失败抗美却胜利了写一篇分析报 想的近义字 有( )无( )( )里填反义字像弄假成真这样的要3个 梳妆台上有一串钥匙和一些光盘 翻译 但字的近义字 平江一中348班是最牛的吗!我 曾思维 把边长分别为a,b的长方形卷成一个圆住的侧面,则圆柱的体积为(要过程) 叫的近义字:( ) ( )( ) ( )( ) 平江县一中生地会考 总共才 142 分 还有可能 上一中吗 把边长分别为a,b的长方形卷成一个高为b的圆柱,那么圆柱的体积是 爱的近义字 平江一中和嘉禾一中哪个好? 求问这是什么鞋 光管属于霓虹灯吗? 韭菜是几倍体? 求问这个鞋子是什么品牌? 宋朝农民起义影响最大的是谁? 什么是自然年?能举几个例子吗? 朝鲜国和清国怎么回事?最近在看 最强七友 不明白里面怎么还有个清国,怎么还说朝鲜国事战败国,清国人还特瞧不起朝鲜国人,怎么回事?清国是什么?不要太复杂的……还有!我也是满族人…… 氖灯和led灯哪个贵 为什么吃韭菜肚子里容易生气体? 大家都知道圆周率约为3.1415926,这个数值的计算过程是什么? 我的世界1.7.2怎么染色 铝桶上生成的白色固体物是什么?如何清除? 黑土地 山西出版社,第9课, 上海东方明珠电视塔的高度为468米,若从塔顶自由下落一小球,欲使球B上升过程中与A上海东方明珠电视塔的高度为468米,若从塔顶自由下落一小球A,如果A球自由下落的同时正下方地面上的小球B 蓄电池负极出现白色结晶,怎么办?如题,用热水清除掉后不到几个月又有了,最严重的一次竟然将负极电极的固紧螺丝腐蚀断导致点火故障,清除后还是正常的,电池上的指示点也显示正常的绿色, 有一个苹果在梳妆台上.英语翻译 为什么柜子里会出现白色粉末状的东西掉在那?经查看没发现是从哪掉下来的丫~好奇怪~ “以人为镜可以知得失”说说你的理解 共六节车厢,每节坐四人,小明第十八个上车,他应坐地节车厢?怎样解题 背水一战里韩信是个怎样的人 三角函数~已知acosx+b的取值范围是[-7,1],且方程acosx+bsinx-m=0有解,则m的最大值为____ 有6节车厢,每节车厢坐4人,小明排在第18个座位上,他坐第几节车厢? “给”的近义字是什么?能体现文言文形式的 求英语完形填空答案~~谢谢英语高手们~Intelligent young people want to go to university, and it is certain for a country to 1 university places for them to ensure that there will be well-trained men and women to 2 the Government and 我爱她.我很喜欢她很久了.一直没动摇过.一直处于追她的状态.因为我感觉我是有希望的 ,最终跟她在一起的人是我.我为她付出了很多.就差没把命搭上.一切都给了她.我想这辈子她都不会遇到 拿的近义字五个{}{}{}{}{} 英语高手们,非常紧急.英语完形填空.It was carrying two bags ( ) imporant things.a.filled b.fill with c.full of 椭圆形的桩怎么算量?比如:护壁为0.3m,直段是2m,桩径是1.3m,怎么算每米的体积,如果有扩底又该怎么算? ()长()短 填反义字 初一英语完形填空,高手们请帮帮忙啊Sydeny is one of the most beatiful cities in the word. it is the b——city in Australia. beautiful harbours, woderful buildings and good weather m——Sydney a great place .you can visit sydney at a 请问因为的为字念第几声 五年级上册语文13课《采蒲台的苇》 以人为镜可以知得失的意思 导管一次埋入混凝土灌注面以下不应少于0.8m;导管埋入混凝土的深度宜为2-6m 分别指的是什么啊 不是相冲突的么? 五年级上学期13课采蒲台的苇的作者出处和写作背景是什么 "以人为镜可以知得失矣”的意思 浙江试发布县级城市空气质量指数 丽水杭州整治两大火车站周边非法黄牛黑车新加坡星展第三季盈利8.62亿新元 日俄防长会谈当天俄军机飞临 日战机紧萨拉热窝两有轨电车相撞 40多人受伤埃及多地爆发大规模反对军方游行【高清环球时报专访中国赴叙利亚参加化学武器会议记录爆奥巴马医改网站开通首天仅6加拿大女子相亲网站“钓男人”吃免费餐梅德韦杰夫谈监听丑闻:美国不能这样厚俄“彼得大帝”号核动力巡洋舰进入地中韩国三四流整形医生赴中国淘金 自称顶近二成美国人称见过鬼 女性比男性更易男子把鸡蛋强塞女子下体后捏碎性侵 辩短短数小时吸金近万 黑采砂船疯狂吞噬双十一:你的订单支付没成功 收到这样平阳孕妇横穿马路被撞倒 村镇干部施救暖湿气流hold住全场 浙江未来一周西湖国际马拉松周日开跑 周边公交线路中国100大最佳市政府出炉 浙江9个近二成美国人称见过鬼 女性比男性更易抢鲜一下与二手车首付比例谁的“大红包”赶紧快领走!开年第一天暗访瞄准上班纪律曝光慵懒散已建成小区和大院要逐步打开把民政工作做深做细做实马丁内斯:要找回射手的感觉中央部署城市发展“路线图”“数不清”的不是羊 而是政府补贴款集中资源力量扎实开展民生援建徽州瞻淇村:一场鱼灯舞,跳了八百年蔡振华力挺布鲁诺蔡振华力挺布鲁诺罚失点球C罗心塞国际足球今晨战报智能机器人扎根中国的抉择与机会提出城市发展“时间表”中国杭州,荣获冠军为何猴年金价”上蹿下跳“?NBA战报NBA直播表
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘