• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
彭旭
天空不留痕迹,鸟儿却已飞过……
博客园    首页    新随笔    联系   管理    订阅  订阅

c# rar压缩解压缩

利用 WinRAR 命令行对文件进行压缩

 参考:http://hi.baidu.com/38809972/blog/item/2d4e864591f8bd20cffca387.html

此程序利用 WinRAR 程序对文件进行压缩,命令行语法可参考WinRAR中文帮助。

 

Code
/// <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)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
                cmd = string.Format("a {0} {1} -r",
                                    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\)的话压缩解压就会出现问题,折磨了我很长时间,最后实在没办法了就在cmd里面试了半天,发现在有空格的路径上加双引号就可以了。在代码里Directory.CreateDirectory(path);后面把 path 和 rarName 都判断一下如果有空格,就加上 path = "\"" + path + "\"";

知识共享许可协议
本文 由 彭旭 创作,采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
posted @ 2008-09-04 13:50  彭旭  阅读(2693)  评论(3)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3