zoukankan      html  css  js  c++  java
  • C#利用WinRAR实现压缩和解压缩

    using System;
    using Microsoft.Win32;
    using System.Diagnostics;
    using System.IO;
    
    namespace MSCL
    {
        /// <summary>
        /// 压缩解压类
        /// </summary>
        public class ZipHelper
        {
            /// <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(@"ApplicationsWinRAR.exeshellopencommand");
                    regvalue = regkey.GetValue("WinRAR");  // 键值为 "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(@"ApplicationsWinRAR.exeshellopencommand");
                    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;
            }
        }
    }
  • 相关阅读:
    [No00004E]千万不要“拼命”工作——写在滴滴总裁柳青患癌症之后
    [No00004D]深度思考好文:软件工程师的困境
    [No00004C]软件工程师的创业陷阱:接私活
    [No00004B]Windows 下面为Python3.5安装NoteBook
    [No00004A]为什么你看了很多书,却依然没有洞见
    [No000049]狗日的中年——姜文
    [No000048]程序员的成长过程中,有哪些阶段?
    [No000047]好的架构源于不停地衍变,而非设计
    [No000046]为什么跳槽加薪会比内部调薪要高?
    [No000045]最好的休息,不是睡觉!
  • 原文地址:https://www.cnblogs.com/smartsmile/p/7677293.html
Copyright © 2011-2022 走看看