C#关于RAR,ZIP的操作

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
using Microsoft.Win32;
namespace RarClass
{
    public class unrar
    {
    public void unCompressRAR(string unRarPatch, string rarPatch, string rarName)
        {
            string the_rar;
            RegistryKey the_Reg;
            object the_Obj;
            string the_Info;

                the_Reg = Registry.LocalMachine.OpenSubKey(@”SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe”);
                the_Obj = the_Reg.GetValue(“”);
                the_rar = the_Obj.ToString();
                the_Reg.Close();
                //the_rar = the_rar.Substring(1, the_rar.Length – 7);

                if (Directory.Exists(unRarPatch) == false)
                {
                    Directory.CreateDirectory(unRarPatch);
                }
                the_Info = “x  -y  ” + rarName + ” ” + unRarPatch ;
                ProcessStartInfo the_StartInfo = new ProcessStartInfo();
                the_StartInfo.FileName = the_rar;
                the_StartInfo.Arguments = the_Info;
                the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                the_StartInfo.WorkingDirectory = rarPatch;//获取压缩包路径

                Process the_Process = new Process();
                the_Process.StartInfo = the_StartInfo;
                the_Process.Start();
                the_Process.WaitForExit();
                the_Process.Close();
               
           
        }
    }
}

2.

/// <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);//解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹
                cmd = string.Format(x {0} {1} -y,
                                    rarName,
                                    path);
                startinfo 
= new ProcessStartInfo();
                startinfo.FileName 
= rarexe;
                startinfo.Arguments 
= cmd;
                startinfo.WindowStyle 
= ProcessWindowStyle.Hidden;= 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;
        }

                Directory.CreateDirectory(path);
                

                startinfo.WorkingDirectory 

 

昨天又看了下,发现如果路径中有空格(如:D:\Program Files\)的话压缩解压就会出现问题,折磨了我很长时间,最后实在没办法了就在cmd里面试了半天,发现在有空格的路径上加双引号就可以了。在代码里Directory.CreateDirectory(path);后面把 path 和 rarName 都判断一下如果有空格,就加上 path = “\”" + path + “\”";

 

3.

  c#与RAR 收藏
本次示例主要实现:
1.压缩文件夹及其下文件
2.压缩文件夹下文件
3.压缩文件夹及其下文件为rar 还是 zip
4.解压缩
5.加密压缩及解加密压缩
———–
示例代码如下:
protected void Button1_Click(object sender, EventArgs e)
    {
        string strtxtPath = “C:\\freezip\\free.txt”;
        string strzipPath = “C:\\freezip\\free.zip”;
        System.Diagnostics.Process Process1 = new System.Diagnostics.Process();
        Process1.StartInfo.FileName = “Winrar.exe”;
        Process1.StartInfo.CreateNoWindow = true;

        //// 1
        ////压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)
        ////到c:\freezip\free.rar
        //strzipPath = “C:\\freezip\\free”;//默认压缩方式为 .rar
        //Process1.StartInfo.Arguments = ” a -r ” + strzipPath + ” ” + strtxtPath;

        //// 2
        ////压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)
        ////到c:\freezip\free.rar
        //strzipPath = “C:\\freezip\\free”;//设置压缩方式为 .zip
        //Process1.StartInfo.Arguments = ” a -afzip ” + strzipPath + ” ” + strtxtPath;

        //// 3
        ////压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)
        ////到c:\freezip\free.zip 直接设定为free.zip
        //Process1.StartInfo.Arguments = ” a -r “+strzipPath+” ” + strtxtPath ;

        //// 4
        ////搬迁压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)
        ////到c:\freezip\free.rar 压缩后 原文件将不存在
        //Process1.StartInfo.Arguments = ” m ” + strzipPath + ” ” + strtxtPath;

        //// 5
        ////压缩c:\freezip\下的free.txt(即文件free.txt)
        ////到c:\freezip\free.zip 直接设定为free.zip 只有文件 而没有文件夹
        //Process1.StartInfo.Arguments = ” a -ep ” + strzipPath + ” ” + strtxtPath;

        //// 6
        ////解压缩c:\freezip\free.rar
        ////到 c:\freezip\
        //strtxtPath = “c:\\freezip\\”;
        //Process1.StartInfo.Arguments = ” x ” + strzipPath + ” ” + strtxtPath;

        //// 7
        ////加密压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)
        ////到c:\freezip\free.zip 密码为123456 注意参数间不要空格
        //Process1.StartInfo.Arguments = ” a -p123456 ” + strzipPath + ” ” + strtxtPath;

        //// 8
        ////解压缩加密的c:\freezip\free.rar
        ////到 c:\freezip\   密码为123456 注意参数间不要空格
        //strtxtPath = “c:\\freezip\\”;
        //Process1.StartInfo.Arguments = ” x -p123456 ” + strzipPath + ” ” + strtxtPath;

       //// 9
       ////-o+ 覆盖 已经存在的文件
       //// -o- 不覆盖 已经存在的文件
       //strtxtPath = “c:\\freezip\\”;
       //Process1.StartInfo.Arguments = ” x -o+ ” + strzipPath + ” ” + strtxtPath;

       ////10
       //// 只从指定的zip中
       //// 解压出free1.txt
       //// 到指定路径下
       //// 压缩包中的其他文件 不予解压
       //strtxtPath = “c:\\freezip\\”;
       //Process1.StartInfo.Arguments = ” x ” + strzipPath + ” ” +” free1.txt” + ” ” + strtxtPath;

       //// 11
       //// 通过 -y 对所有询问回应为”是” 以便 即便发生错误 也不弹出WINRAR的窗口
       //// -cl 转换文件名为小写字母
       //strtxtPath = “c:\\freezip\\”;
       //Process1.StartInfo.Arguments = ” t -y -cl ” + strzipPath + ” ” + ” free1.txt”;

        Process1.Start();   
        if (Process1.HasExited)
        {
               int iExitCode = Process1.ExitCode;
                if (iExitCode == 0)
                {
                    Response.Write(iExitCode.ToString() + ” 正常完成”);
                }
                else
                {
                    Response.Write(iExitCode.ToString() + ” 有错完成”);
                }
        }
    }

4.

C#调用rar.exe解压一个rar文件到系统的临时目录

 

//C#调用rar.exe解压一个rar文件到系统的临时目录:
//取得系统临时目录
string sysTempDir = Path.GetTempPath();

 

//要解压的文件路径,请自行设置
string rarFilePath = @”d:\test.rar”;

//确定要解压到的目录,是系统临时文件夹下,与原压缩文件同名的目录里
string unrarDestPath = Path.Combine(sysTempDir,
    Path.GetFileNameWithoutExtension(rarFilePath));

//组合出需要shell的完整格式
string shellArguments = string.Format(“x -o+ \”{0}\” \”{1}\\\”",
    rarFilePath, unrarDestPath);

//用Process调用
using (Process unrar = new Process())
{
    unrar.StartInfo.FileName = “rar.exe”;
    unrar.StartInfo.Arguments = shellArguments;
    //隐藏rar本身的窗口
    unrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    unrar.Start();
    //等待解压完成
    unrar.WaitForExit();
    unrar.Close();
}

//统计解压后的目录和文件数
DirectoryInfo di = new DirectoryInfo(unrarDestPath);

MessageBox.Show(string.Format(“解压完成,共解压出:{0}个目录,{1}个文件”,
    di.GetDirectories().Length, di.GetFiles().Length));

posted @ 2010-08-06 11:54  ( ⊙ o ⊙ )啊!  阅读(3419)  评论(2编辑  收藏  举报