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

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

 

 

Qualcomm承诺投入1.5亿美元 扶持中国初创企业 物联网多了把“新板凳” 联想推三款智能硬件 .NET技术+25台服务器怎样支撑世界第54大网站 基调网络发布听云平台:“听”懂App性能 《近匠》豌豆荚李大海:用搜索敲开手机娱乐平台之门 微信开发HTML5轻游戏中的几个坑 【微信大会】企业号、支付功能、智能客服与LBS、电商开发解析 【CTO俱乐部走进海尔】活动图文直播进行中 燃料电池商业化,数据中心或将永不断电? 广告教父的哲学:值得F2P游戏借鉴的8条经验 UC李云:基于Chromium的浏览器如何打造更好体验 一周消息树:颠覆互联网思维?年薪50万码农转行卖凉皮 Coconut2D:跨平台2D游戏及应用开发工具 第八届中国大数据技术大会将于12月中旬隆重召开 10个常见的缓存使用误区 用户暴增下的收入降低,AWS面临尴尬 云数据中心选址PK:微软第一,IBM第二,谷歌最少 不应错过2014微信开发者大会的八个理由 为什么软件测试需要变革? 苹果和IBM成最佳搭档 微软谷歌或受威胁 OpenStack社区又添新成员 浪潮推动开放云生态系统构建 重度使用AWS及Hadoop,Pinterest的自服务平台打造历程 《近匠》腾讯信鸽:基于大数据的推送 超低功耗&amp;#039;Whisper&amp;#039;架构发布:IoT、可穿戴连接性IP新标准! R的数据分析制霸以及企业级应用盘点 第二届游戏运营技术论坛来袭!与大牛共论云时代的游戏运营之道 云雀科技:飞行器+地图,展望飞行器的新体验 Sandstorm,前Googler和极客名人建立通用开源工具保姆 触控科技CEO陈昊芝:引擎技术推动行业升级 谁能成为Hero,这一次你说了算!——TCL智能电视开发大赛创意阶段评审征集 微信官方在“公开课”上13个热点问题的解答摘要 通过MCSE的各位老师,各位大侠请进!! 817NtEE的安装问题!(急) 上午听专家上课,他说:"深圳科陆(做电力系统的)的技术不错",是这样吗? 为什么getsystemtime得到的系统时间的小时数中比当前小时数小8?为什么?为什么?为什么?为什么?为什么?为什么?为什么? 如何实现页面一打开就下载一个文件? 在delphi中用ShellExecute调用oracle的imp/exp/sql loader这些命令的语句应该怎样写? 在三层开发过程中,如果客户端是win95,则需要安装WinSocket2.0,问题是在程序中怎样判断客户端是否安装了WinSocket2.0版本? 谁有好用的http代理给一个? 请教浙大1038题 关于 SSI SHTML 方面的问题 好久不来了,今儿高兴,散分。(前十位) ADO的数据库连接问题 谁做过dbf文件转文本文件的程序 哪有介绍delphix的文章下载啊,我的英语水平实在不怎么样,那个help看不懂啊! 偶得一SDK电子书,不敢私有,与大家共享,与想了解SDK的朋友共享。 安装Red hat linux 7.3时遇到以下问题,请指教... 如何向另一个进程发送键盘消息或者给进程发送菜单命令? 高分之下,必有勇夫! 关于包的问题(什么情况下才能访问同一目录下另一文件的类?) 字体的大小问题! (三层结构)我按照李维书上所说的,为什么客户端老是连不上应用程序服务器端? 初学Delphi,请各位大虾帮助!高分送上 关于定位打印的问题!!! 怎么写分组发新闻的jsp程序 关于界面设计的问题... 我想自己写个Mp3播放器,结果遇到不少问题。请大家帮忙 WIN2000关机巨慢,原因是什么? 关于字符串比较大小?下面代码有错么????????????? c++调试问题? #include <string> 后编译不过去。请帮忙看看 请教各位:关于TButton->ModalResult 在NS浏览器中如何对text等这样的对象进行事件的处理? sql2000里如何得到当前记录号??/ ----------- iis或win2000server中如何设置文件夹大小??? 大家有没有做过医疗社区管理软件的?最好有成熟的源代码。 介绍一款好的主板,搭配p41.7G。 我升级了我的VB6程序,有个问题解决不了,来看看 做一个Java程序。将光盘上的某个目录拷到C盘上 清教一个计算机系统结构的计算题,题目见内容 关于文件读入的问题!谢谢各位! 数据统计分析问题,请专家关注!好难 如何判断执行 INSERT INTO 语句插入记录成功或失败? 哪位大侠能给我详细的介绍一下CWnd::SendMessage()函数 Strange return value of CoInitializeEx [HELP]辞职问题:杭州的GGJJ们来帮帮我 谁有windows 95的下载地址? ADO与本地数据库问题,看来是高难问题啊,怎么没人接招呢? tell me why??有关jdbc for sqlserver 2维数组按某一列进行排序,内详,求救? 关于在Oracle数据库服务器如何提供下载一个excel文件型的大对象到本地?十万火急!三根鸡毛! 怎样得到数据库里某字段里没出现过、而且还是最小的数字呢? 小池和晓出净慈寺送林子方中写出第一首诗中表现自然景物之间亲密接触融洽关系的词语 小池200字想象作文(第一句到第二句) 《琥珀》这篇课文是按什么写作顺序写的两种 《小池》与《晓出净慈寺送林子方》都描写了荷花,但写法各有不同,请指出它们的不同之处.是写法上的不同 以杨万里的《小池》为题写一篇作文(体裁不限) 求几篇关于青春伤感的文章如题 想要 小池和晓出净慈寺送林子方两首诗都写了荷花,但写法上各有不同,请指出 从《将相和》一课中,我觉得赵王是一个————的人,因为他————. 琥珀 课文哪些部分描写了真实的情景哪些部分描述了想象的背景 小池与晓出净慈寺送林子方的问题1 小池中表现自然景物之间融洽关系的词语有______、_____、_____.2 两诗都有荷花,但写法不同,指出来_______________ 《小池》 伤感的青春800字作文 在黑板上写出1,2...,1993,只要黑板上还有2个或2个以上的数,就擦去其中的任意两个数并写上(a-b)问最后黑板上剩下的数是奇数还是偶数? 求课文《琥珀》阅读答案琥珀形成经历了哪两个阶段?请使用简洁的语言概括第二阶段的内容. 青春悲伤的短文 四年级鸟的天堂导游词 (课文)写出下面想像的依据(1)一个夏天,太阳暖暖的照着.想像的依据( )(2)海在很远的地方翻腾怒吼.想像依据( )(3)树林里长着许多高大的松树.想像依据( )那,形成这块琥珀需要 写一篇科学小论文.500字左右. 《将相和》中,赵王是个什么样的人,为什么? 琥珀课文为什么要写苍蝇的身上沾满了灰尘 写一篇科技作文500字 小学人教版四年级上册第三课鸟的天堂写一段导游词 谢谢 课文--琥珀的价值 急求一篇科学小论文!500字 《将相和》中赵王是个怎样的人?为什么? 我想知道镜子里的自己比较真实还是照片?! 九月九日忆山东兄弟意思 《将相和》赵王是个怎样的人先“赵王是个——的人,因为他————————. 将相和中,蔺相如 廉颇 赵王分别是怎样的人,为什么? 《九月九日忆山东兄弟》中的异是啥意思 我发现的作文怎么写 小池作者是谁 九月九日忆山东兄弟是什么意思 神话故事封神榜的请教不知道剧情安排比干被挖心后遇见卖菜婆后因为老婆婆的回答后死了到底寓意着什么?是当时人们的一种什么意思?这个故事在最初的时候到底反映着什么样的精神内涵 小池的作者是什么代的? 无题翻译 三年级下册的多音字1 小池的作者是谁 《琥珀》这篇课文的作者是?本人急用!@#¥%…… 七年级下册20课的多音字 小池全诗 无题的翻译 英语翻译 写我的作文开头结尾,开头和结尾要一篇文章的 无题 无 题①黑板上赫然写道:学杂费总计97.5元.他盯着这个数字,口袋里的手攥着的那张皱巴巴的50元钱已被手心里的汗浸湿了.他不得不一步一回头地向学校门口走去……②他坐在自家堂屋 英语翻译 收集好的短文,随笔,作文,或者好的文章开头结尾.文章500字左右 《琥珀》这篇课文的作者是谁 英语翻译Friendship is a very important human relationship and everyone needs good friends.Good friendship has many benefits.It offers companionship,improves self-worth and promotes good health.There are times in our lives such as when we have rec 鲁迅的《雪》中,“就是这样”体现出怎样的语气 6年级课文琥珀课文中写的这块有什么的特点 英语翻译Asia stocks and oil fell for a second after U.S,job growth stalled last month and amid concerned Europe's sovereign crisis will worsen.The Dollar Index headed for longest winning streaks in eight month. 父亲的难题阅读答案,就一题!导致父亲遇到难题的根本原因是( ),父亲的难题是( ) 李商隐无题 请问对生命的理解或感悟的作文怎么写?400字左右就行. 父亲的难题 就一题!父亲的难题①小保罗是个三年级的小学生.他父亲虽然空闲时间不多,但晚上却经常同他的孩子在一起.父亲喜欢孩子,总是津津乐道、不厌其烦地给他们讲些富有教益的寓言 根据名字取英文名我的中文名字:马玉迪阳,要一个英文名字,该怎么取?最好是“**-M-迪”之类的 名字是男的 小池和晓出净慈寺送林子方有什么不同1 镜子和照片哪个才是真实的自己 想根据名字取个英文名姓名:徐晓雨女 狮子座希望能根据谐音起!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘