zoukankan      html  css  js  c++  java
  • WinRAR(WinZip)压缩与解压实现(C#版Window平台)

    本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。

    先来看WinRAR(WinZip)自身的支持调用命令:

    压缩命令:a {0} {1} -r 【{0}:压缩后文件名|{1}:待压缩的文件物理路径】

    ex:"a 你妹.rar f:\MM -r" (含义为将f盘下MM的文件夹压缩为"你妹.rar"文件)

    解压命令:x {0} {1} -y 【{0}:待解压文件名称|{1}:待解压文件物理路径】

    ex:"x 幺妹.rar f:\幺妹 -y"(待压缩文件物理路径:"f:\幺妹\幺妹.rar")

     

    参数说明

    参数

    含义

    a

    添加文件到压缩包

    x

    以完整路径从压缩包解开压缩

    WinZip(WinRAR)调用通用类

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    //--------------using
    using System.Diagnostics;
    using Microsoft.Win32;
    using System.IO;
    
    
    /// <summary>
    /// Name:Stone
    /// DateTime: 2011/12/31 16:39:26
    /// Description:WinRAR压缩
    /// </summary>
    public class WinRARCSharp
    {
        // WinRAR安装注册表key
        private const string WinRAR_KEY = @"WinRAR.ZIPshellopencommand";
    
        /// <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(WinRAR_KEY);
                regvalue = regkey.GetValue("");  // 键值为 "d:Program FilesWinRARWinRAR.exe" "%1"
                rarexe = regvalue.ToString();
                regkey.Close();
                rarexe = rarexe.Substring(1, rarexe.Length - 7);  // d:Program FilesWinRARWinRAR.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(WinRAR_KEY);
                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;
        }
    }
    

      调用方法

    WinRARCSharp win = new WinRARCSharp();
    
    win.RAR("F:\aaa\", "f:\", "a.rar"); // 压缩(将“f:\aaa\”目录文件压缩到“f:\a.rar”)
    
    win.UnRAR("f:\呦M.zip", "f:\MM", "GG"); // 解压(将“f:\呦M.zip”解压到“f:\MM\GG”目录下)
    

      7z压缩通用类:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    using Microsoft.Win32;
    using System.Diagnostics;
    using System.IO;
    
    
    /// <summary>
    /// Name:Stone
    /// DateTime: 2012/1/4 16:26:08
    /// Description:7Z解压管理类
    /// </summary>
    public class _7zRAR
    {
    
        // 7z.exe 安装地址
        private const string _7zEXE = @"D:Program Files (x86)7-Zip7z.exe";
    
        /// <summary>
        /// 利用 7zExE 进行压缩
        /// </summary>
        /// <param name="_7zPath">将要被压缩的文件夹(物理路径)</param>
        /// <param name="filePath">压缩后的的存放目录(物理路径)</param>
        /// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>
        public static bool Un7zRAR(string _7zPath, string filePath)
        {
            bool flag = false;
    
            string cmd;
            ProcessStartInfo startinfo;
            Process process;
            try
            {
                cmd = String.Format(@"x {0} -o{1} -y",
                    _7zPath, filePath);
                startinfo = new ProcessStartInfo();
                startinfo.FileName = _7zEXE;
                startinfo.Arguments = cmd;
                startinfo.WindowStyle = ProcessWindowStyle.Hidden;
    
                process = new Process();
                process.StartInfo = startinfo;
                process.Start();
                process.WaitForExit();
                if (process.HasExited)
                {
                    flag = true;
                }
                process.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
            return flag;
        }
    }
    

      

  • 相关阅读:
    每天进步一点点--&gt;函数fseek() 使用方法
    几种更新(Update语句)查询的方法
    hibernate批量删除和更新数据
    Android ViewPager使用具体解释
    Linux curses库使用
    安装numpy、nltk问题汇总
    android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
    Eclipse中SVN的安装步骤(两种)和用法
    Intent用法
    Tomcat全攻略
  • 原文地址:https://www.cnblogs.com/diulela/p/4354716.html
Copyright © 2011-2022 走看看