澳门葡京投注网址

  • [预告]曾子墨做客传媒沙龙 "拷问民生、叩问生命" 2018-08-31
  • [静安]区举行决胜进博会动员大会 2018-08-31
  • [静安]区2018年全民禁毒宣传月启动仪式 2018-08-31
  • [青浦]青浦区服务保障进博会现场指挥部召开第八次全体会议 2018-08-31
  • [青浦]区委常委、政法委书记赵明来白鹤镇督查进博会维稳工作 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第五次委员长会议 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第二次委员长会议 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第一次委员长会议 2018-08-31
  • [视频]栗战书主持召开全国人大常委会大气污染防治法执法检查组第二次全体会议 2018-08-31
  • [视频]栗战书主持召开全国人大常委会党组会议专题学习习近平总书记关于人民代表大会制度的思想 2018-08-31
  • [视频]栗战书主持十三届全国人大常委会履职学习专题讲座 2018-08-31
  • [视频]栗战书与阿塞拜疆国民议会议长举行会谈 2018-08-31
  • [视频]栗战书与缅甸联邦议会议长兼民族院议长举行会谈 2018-08-31
  • [视频]习近平在视察北部战区海军时强调 贯彻转型建设要求 锻造海上精兵劲旅 2018-08-31
  • [视频]习近平在视察军事科学院时强调 努力建设高水平军事科研机构 为实现党在新时代的强军目标提供有力支撑 2018-08-31
  • 澳门葡京投注网址 澳门葡京投注网址 | 我的澳门葡京投注网址
    好饱的专栏

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

    发布者:好饱
    发布日期:2012/8/10 11:39:17   更新日期:2012/8/11 20:53:12
    阅读次数:21126
    评分:4.80
    介绍:介绍了压缩解压的两种方式:方法一、调用WinRAR方式,方法二、使用C#压缩解压库
    正文:

    澳门葡京投注网址 www.guilhermecbo.com  

    方法一、调用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命令行压缩。

     

     


    评论 [发表评论]
    账号 密码 还没帐号呢,现在注册一个?

    免责声明:澳门葡京投注网址所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。澳门葡京投注网址不提供任何保证,并不承担任何法律责任。