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

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

 

 

Windows 8和IE 10:如何保障视频播放? 云计算大会讲师秀之13:梁家恩,12年积累,构建永久免费的语音云平台 众望所归:智能手机芯片将为服务器所用 没有学位,他通过以下四步进入Google 谈谈Google Polymer以及Web UI框架的未来 保密入髓:前苹果员工揭示公司是如此善于保守秘密 调查显示:软件开发公司出现“人才荒” 三星拟6月20日在伦敦召开新品发布会 推手机新品Galaxy和ATIV 历届中国云计算大会PPT集萃(五):数据安全隐患解析与应对 搞趣网创始人:做不了阳春白雪 就做下里巴人 CMDN Club 28期:创业公司一定不要浪费资源 浅谈Lean UX:我们到底该怎么设计? 张艺谋今日正式加盟乐视 作品专区落户超级电视 WebKit华丽转身:欧朋浏览器8.0新鲜出炉 分析师称应出售Bing?除非微软倒闭,否则不可能卖Bing Go Mobile沙龙第二期:软硬整合与创客精神 专访西电黄宝林:《基于GPU的并行NMF网络聚类算法》获奖背后故事 友友姚宏宇:用C,C++和Java实现自主研发之后,放开心态迎“高朋” 新技术对传统学科的颠覆:系谱网使用大数据寻亲问祖 IDC:2015年全球平板电脑出货量将超PC Web开发者的福利 30段超实用CSS代码 库克出席D11科技大会:苹果公司没有陷入麻烦 千兆的带宽是不够的,最新研究将我们带入400G时代! 告诉你一个事实:移动互联网依然不大 一切才刚刚开始 戴尔的10亿美元云扩建计划到底是什么? iOS vs. Android,应用设计该如何对症下药? 扁平化设计五大原则 16种折磨开发者的方式 2013年度中国优秀开源项目征集活动正式启动 技术趋势:产品设计向“钱”看 服务器领域:旧时代已过 新时代正在降临 Forgotten Birthd Husbands Overheard Fine 有个在多线程中使用ADO的问题。请高手们帮忙。 Suede jacket 可能是installshield的Bug! 我想去北京找个工作,请大家帮帮忙,提供点信息! 装了“猫”为何还有630错误(电话线也接了)? excel 問題 各位:数据窗口有一检索变量,现在想retrieve出所有的记录,检索变量应该怎样赋值?谢谢! linux和windows是不是只能分别装在两个分区中 关于图像处理:如何使图像锐化与柔化? 帮帮我啦! 我在使用jdbc读取数据的时候,碰到了内存溢出的问题,怎么回事呀 哪里有餐饮系统的介绍?90不够的话,先欠着,多谢了! 在两个ASP程序之间怎么传递参数? ccl2000(不帅不酷的Goblin):其实你真的很酷很帅的。 大侠帮帮我啦(关于SQL语句的问题) 关于Vxd的编译问题 用VC编的程序,一运行就说“执行非法操作”,问题出在哪里?? SQL Server有病 一个关于api的简单问题 《易佳自定义报表》用后很失望 请教各位高手一个有关报表控件的问题? 小妹向大家请教!可不可以直接在本页的代码中改变该页面浏览时的属性? 家菲猫:惊悉你昨晚惨遭不幸,被窃大量钱物,今日一天无法和你联系上,估计手机和通信录已全部丢失,如果今晚无法来我处,明早8点以前请务必携猫 MM 赶到上海南站!!! MDI文档模板和应用程序调用问题请教,大侠请进! 一个c++问题???? 请问各位高手,sqlserver2k加密的存储过程是否能解密,看到它的实际的语句?可否能跟踪加密的存储过程? 我下载了一个formula one ,发现她的界面跟excel差不多,在pb中怎么用? 高分求XML 高级编程(足本)[01.pdf到10.pdf]!!!! 招聘汇编程序员 ie 中true dbgrid 的问题 急招聘汇编程序员 关于WINDONWS文件夹 WIN2000有关用户管理的问题 谁可以告诉我怎么调用已有的EXE文件。 有谁知道广州或南海的高级程序员考试的辅导点 如何把系统时间作为一个文件的保存名? TURBO C语言对磁盘操作的问题 着急招聘汇编程序员 为什么大家得的都是0分? 这行代码是什么意思: 不知怎的,不小心访问到一个网站。我已设为使用空页,可它还是要先启动,画面又恶劣,怎么办? 还是关于从字符串中提取汉字的问题,我是从*.txt取出一个字符串(readln),结果无法提取汉字 请大家帮忙,白送分的 为什么我无法安装win2000??? 如何只显示数据库中的最后一条记录?(只显示一条) delphi中编的COM控件如何在WWW服务器上使用? 如何运行时拖动一个控件,如BUTTON等。 别兴奋了,进入正题吧!老是报到什么的,快讨论呀! 1,将含有C,H,O的有机物3.24g装入元素分析装置,通入足量的氧气使之完全燃烧,将生成的气体依次通过CaCl2管【A】和碱石灰管【B】,测得A管质量增加了2.16g,B管增加了9.24g,已知该有机物的相对分子 在DNA的粗提取实验过程中,两次烧杯中加入蒸馏水的作用 他这样做有什么目的?RT男友半个月没有理我了,我道歉他不理我(其实我好像没有错只想让步),他什么都不说连分手都不说,一个字都不说,更别说见面了!他还删除了我去他空间的到访记录,平 高二化学——有机物的基础像CH3,CH4这样的,假设它们是最简式在没有相对分子质量的情况下,怎么知道它的化学分子式,老师说有些不用相对分子质量就可以知道它的分子式的.上课有点没听懂. 实验室制取二氧化碳注意事项不能用……代替……,因为…… (这个格式) 要有总结性,简练, 章目的意思是什么 某烃的结构简式为 分子中含有四面体结构的碳原子数为a,在同一直线上的碳原子数最多为b,一定在同一平面内的碳原子数为c,则a、b、c分别为_________.请问一定在同一平面内的碳原子数为是不 实验室制取二氧化碳的注意事项就是那个石灰石和稀盐酸制取二氧化碳,其中有什么注意事项? 告诉我你的理想是什么 高二化学! 在线等 求教高手向四个体积相同的密闭容器中分别充入一定量的SO2和O2,开始反应时,按正反应速率由大到小排 列顺序正确的是( )甲:在500℃时,SO2和O2各10 mol反应乙:在500℃时 实验室制取气体时要注意的是1.选择适当的反应,包括___和___;2.选择合适的___;3.需验证所制得的气体 你的目标理想是什么? 怎么样的有机物能发生氧化反应?酯化反应?加成反应?取代反应?消去反应? 实验室制取氯气为什么要用饱和食盐水来吸收氯化氢气体? 嘎子有哪些理想?分别是什么 今有三种饱和一元醇A,B,C其相对分子质量之比为8:22:29按物质的量之比1:2:1将A,B,C三种醇混合取该混合醇16.2g与足量金属钠反应生成标准状况下氢气的体积为2.24L试计算- 1)A,B,C三种醇相对 实验室制取氯气时为什么用饱和食盐水去除氯化氢气体?我买的资料上说也可以用少量水,可是氯气不是溶于水么?还有,如果用不饱和的食盐水会怎么样? 方向是什么意思 丁烷失去一个氢原子后所剩余的原子团叫做丁基,丁基有___种,写出所有丁基的结构简式___.丁烷的一氯代物有___种.相对分子质量为114的烷烃,其一氯代物只有一种,则此结构简式为___名称___ 为什么实验室制取氯气时先用食盐水后用浓硫酸 论文选题的目的 意义 怎么写? A.甲烷和溴蒸汽在加热条件下发生取代反应B.乙炔和溴水中的溴发生加成反应请问哪个是对的?为什么.. 实验室里制氯气中,饱和食盐水起什么作用?MnO2+4HCl =Cl2+MnCl2+Cl2+2H2O为得到纯净的氯气,需要把浓盐酸和二氧化锰在加热条件下反应产生的气体依次通过 饱和食盐水 浓硫酸 我不知道饱和食盐水 发布文章最终目的是什么?发布文章的目的是的让百度收录就可以了是吗? 3.描述CH3—CH==CH—C≡C—CF3分子结构的下列叙述中,正确的是A.6个碳原子有可能在一条直线上 B.6个碳原子一定都在同一平面上 在实验室制氯气的实验中,为什么要用饱和食盐水?它对次氯化氢(和氯化氢)有什么作用 论文选题的目的和意义我的论文题目是《正当防卫与防卫过当》请帮我谈谈选题的目的和意义!小弟在这里谢谢你们了! 高二化学.谢谢 为何石油的分馏实验中温度计的底部要放在导管的接入口? 两会是什么?两会的目的和意义是什么?作文500字 丙烷是石油分馏的一种产品对吗? 石油的分馏实验中,温度计水银球插入液面以下,因为它测的是混合液的温度.这句话错哪里了 论文的意义和目的大神们帮帮忙我写了关于社会保障与社会和谐的论文,谁能帮我写下研究这个课题的目的和意义啊 1-溴丙烷与氢氧化钠反应为什么要加水 在石蜡分馏试验中,我们用蘸石蜡油的棉花放在试管底部,加上碎瓷片灼烧,反应原理是什么?碎瓷片?这个是石蜡的分馏,我想知道这个是物理变化还是化学变化。因为网上写的是石蜡是固态高 互联网是哪种语言编的 甲乙两容器中均充入2mol SO2,1mol O2,发生反应2SO2(g)+O2(g)=2SO3(g) △H 1-溴丙烷和2-溴丙烷分别与NaOH的乙醇溶液共热的反应中,两反应A 产物相同,反应类型相同 B 产物不同,反应类型不同C 碳氢键断裂的位置相同 D 碳溴键断裂的位置相同 汽油是石油加热分馏得到的产物,它其中可能含有哪些元素,请证明出来要有详尽的理由 高二化学等效平衡在一固定容积的密闭容器中,保持一定温度,A+2B==3C,已知加入1molA和3molB且达到平衡后,生成了amolC在相同条件下,若在同一容器中,改为加入2molA和8molB,若要求平衡后C在反应混合 将1—氯丙烷跟氢氧化钠的醇溶液共热、生成的产物再跟溴水反应、得到一种有机物,他的同分异构体有几种? 煤气的分解和石油的分馏是一回事么? 已知2SO2 (g)+O2 (g)⇌2SO3 (g);△H=-197kJ•mol-1.向同温、同体积的三个密闭容器中分别充入气体:(甲) 2mol SO2和1mol O2;(乙) 1mol SO2和0.5mol O2;(丙) 2mol SO3.恒温、恒容下反 一溴丙烷和氢氧化钠醇溶液反应的化学方程式 理想跟目标是什么意思 高二化学等效平衡的讲解要详细的 ~~ 解释透彻的~~拜托啦 1-溴丙烷与2-溴丙烷和NaOH的水溶液反应的方程式水溶液 不是醇溶液 你奋斗一生的目标或者意义是啥? 有关于高二化学 等效平衡的问题一个非等体反应在恒容的情况下,成比例加入与之前相同的药物,那么当反应达到平衡状态时,各物质所占百分数是否与之前一样? 在制取蒸馏水的实验中,烧杯里装冷水的目的是什么 理想是什么意思 各类有机物的性质和可以发生的反应.一些特殊性质等. 制取蒸馏水的实验中试管内装的冷水有什么作用 “两个百年目标”的具体内涵是什么? 谁可以帮我总结一下高二化学有机物那一块的所有的有机物(甲烷等)的物理性质和化学性质?化学性质最好有方程式 请问在化学实验室制取蒸馏水装置中,为什么冷水从下管进,上管出 这样做是有目的的. 高二化学有机物的一些简单总结(正确的加30分)哪些官能团和NaOH,Na,Cu(OH)2,NaCO3反应?哪些能用溴水检验? 这章我学起来有点吃力,不清楚的就不要回答 实验室制取蒸馏水试验中冷凝器是什么作用 他这样做什么目的的?我们认识半年了..期间男友的母亲不同意我们在一起...男友一直抗着..到最后男友累了...说分手..那时候他反反复习复说合又分.之后我越想越奇怪..后来我才知道..他母亲
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn