winrar 压缩

原创 2018年04月16日 23:27:43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Diagnostics;
using System.IO;


namespace TaiLian.Common
{
    public class WinRARCSharp
    {
        // WinRAR安装注册表key   
        private const string WinRAR_KEY = @"WinRAR.ZIP\shell\open\command";
        /// <summary>
        /// 
        /// </summary>
        /// <param name="path">将要被压缩的文件夹(绝对路径)</param>
        /// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>
        /// <param name="rarName">压缩文件的名称(包括后缀)</param>
        /// <returns></returns>
        public static 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 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);
                // 去掉上级目录               
                //cmd = string.Format("a {0} {1} -ep1",
                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>
        /// 将一个文件从指定压缩文件中解压到指定的目录中
        /// </summary>
        /// <param name="SourcePath">压缩文件</param>
        /// <param name="path">解压文件的目录</param>
        /// <param name="fileName">要解压文件的名称</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinUnZipFile(string SourcePath, string path, string fileName)
        {
            try
            {
                string arguments = "x " + SourcePath + " " + fileName + " " + path;
                return WinrarProcess(arguments);
            }
            catch
            {
                return false;
            }
        }
        /// 将一个文件放到压缩文件中
        /// <summary>
        /// 将一个文件放到压缩文件中
        /// </summary>
        /// <param name="SourcePath">压缩文件的路径及名字</param>
        /// <param name="path">压缩 文件的路径</param>
        /// <param name="fileName">压缩文件的名字</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinZipFile(string SourcePath, string path, string fileName)
        {
            try
            {
                System.IO.File.Exists(path + fileName);
                string arguments = "a -ep " + SourcePath + " " + path + fileName;
                return WinrarProcess(arguments);


            }
            catch
            {
                return false;
            }
        }


        /// <summary>
        /// 讲一个文件放到压缩文件中,并删除该文件
        /// </summary>
        /// <param name="SourcePath">压缩文件的路径及名字</param>
        /// <param name="path">压缩 文件的路径</param>
        /// <param name="fileName">压缩文件的名字</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinZipFileDel(string SourcePath, string path, string fileName)
        {
            try
            {
                System.IO.File.Exists(path + fileName);
                string arguments = "a -ep -df " + SourcePath + " " + path + fileName;
                return WinrarProcess(arguments);


            }
            catch
            {
                return false;
            }
        }


        /// 将一个rar文件解压到指定的位置,,不带压缩目录
        /// <summary>
        /// 将一个rar文件解压到指定的位置,,不带压缩目录
        /// </summary>
        /// <param name="rarPath">rar压缩文件的路径</param>
        /// <param name="UnZippath">解压文件要放的路径</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinUnZip(string rarPath, string UnZippath)
        {
            try
            {
                string arguments = string.Format("e \"{0}\" \"{1}\" ", rarPath, UnZippath);
                return WinrarProcess(arguments);
            }
            catch
            {
                return false;
            }
        }


        /// 将一个rar文件解压到指定的位置,不带压缩目录
        /// <summary>
        /// 将一个rar文件解压到指定的位置
        /// </summary>
        /// <param name="rarPath">rar压缩文件的路径</param>
        /// <param name="UnZippath">解压文件要放的路径</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinUnZip(string rarPath, string UnZippath, int a)
        {
            try
            {
                string arguments = string.Format("x \"{0}\" \"{1}\" ", rarPath, UnZippath);
                return WinrarProcess(arguments);
            }
            catch
            {
                return false;
            }
        }




        /// 带目录进行压缩
        /// <summary>
        /// 带目录进行压缩
        /// </summary>
        /// <param name="raPath">压缩文件的路径</param>
        /// <param name="filePath">被压缩文件夹的路径</param>
        /// <returns>return成功 否则 失败</returns>
        public bool WinZipWithFile(string raPath, string filePath)
        {
            try
            {
                string arguments = string.Format("a \"{0}\" \"{1}\" ", raPath, filePath);
                return WinrarProcess(arguments);
            }
            catch
            {
                return false;
            }
        }


        /// 不带目录进行压缩
        /// <summary>
        /// 不带目录进行压缩
        /// </summary>
        /// <param name="raPath">压缩文件的路径</param>
        /// <param name="filePath">被压缩文件夹的路径</param>
        /// <returns>return成功 否则 失败</returns>
        public static bool WinZipNotFile(string raPath, string filePath)
        {
            try
            {
                string arguments = string.Format("a -ep \"{0}\" \"{1}\" ", raPath, filePath);
                return  WinrarProcess(arguments);
            }
            catch
            {
                return false;
            }
        }




        /// winrar 的执行程序
        /// <summary>
        /// winrar 的执行程序
        /// </summary>
        /// <param name="arguments">要执行的winrar命令</param>
        /// <returns> return成功 否则 失败</returns>
        private static bool WinrarProcess(string arguments)
        {
            try
            {
                Process winrar = new Process();
                winrar.StartInfo.FileName = "winrar.exe";
                winrar.StartInfo.CreateNoWindow = true;
                winrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                winrar.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
                winrar.StartInfo.Arguments = arguments;
                winrar.Start();
                winrar.WaitForExit();
                if (winrar.HasExited)
                {
                    int iExitCode = winrar.ExitCode;
                    if (iExitCode == 0)
                    {
                        //正常完成
                        return true;
                    }
                    else
                    {
                        //有错
                        return false;
                    }
                }
                winrar.Close();
                return false;
            }
            catch
            {
                return false;
            }
        }


    }


}


自己写的:

//压缩后的压缩包名称
                        Guid guid = Guid.NewGuid();
                        string yasuoName = guid + ".rar";
                        //压缩后的压缩包路径
                        string yasuoPathSave = HttpContext.Current.Server.MapPath(@"~\ExportFiles\" + DateTime.Now.ToString("yyyyMMdd") + "-zhongbiaotongzhi" + @"\" + yasuoName);


                        if (!System.IO.File.Exists(yasuoPathSave))
                        {
                            try
                            {
                                #region WinRAR压缩
                                System.Diagnostics.Process pro = new System.Diagnostics.Process();




                                pro.StartInfo.FileName = UtilityCommon.GetWinRARPath();//WinRAR所在路径


                                //启动进程的路径
                                pro.StartInfo.WorkingDirectory = dir;
                                pro.StartInfo.Arguments = string.Format("a {0} {1} -ep1", yasuoName, dir);//WinRAR命令


                                pro.Start();
                                TimeSpan times = new TimeSpan();
                                times = pro.TotalProcessorTime;
                                bool bo = pro.WaitForExit(60000);//设定一分钟
                                if (!bo)
                                    pro.Kill();
                                pro.Close();
                                pro.Dispose();


                                DownLoadFileHandle(yasuoPathSave);
                                #endregion
                            }
                            catch (Exception)
                            {


                                throw;
                            }
                        }

HTML技法-HTML加密解密/压缩优化与HTML乱码分析/防360拦截/HTML万能解密器

课程内容包含乱码的原因分析、代码的压缩与优化、JavaScript/html前端代码加密解密、前端加密防360浏览器拦截、html代码解密原理分析、万能解密神器、手动解密html代码等等。
  • 2016年06月28日 14:02

利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹

利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件win...
  • diligentcat
  • diligentcat
  • 2010-08-19 11:01:00
  • 1879

命令行方式调用winrar对文件夹进行zip压缩示例代码

调用C#自带的API进行压缩 //zip destFullPath = destFullPath + "\\" + _myConfig...
  • lee353086
  • lee353086
  • 2015-07-13 17:29:46
  • 2728

使用计划任务将文件夹备份为压缩文件(使用WinRAR)

在做备份时, 如果将文件与文件夹直接拷贝,占用空间较大;如果能将文件夹使用Winrar压缩备份,将会使得备份空间利用更有效率。首先需要建立批处理文件脚本,Winrar支持命令行模式,所以我们建立一个文...
  • simonjo
  • simonjo
  • 2007-02-26 15:00:00
  • 1444

利用WinRAR命令行压缩文件或文件夹

利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件win...
  • diligentcat
  • diligentcat
  • 2010-08-19 11:50:00
  • 3292

WinRAR压缩时排除文件或目录

http://xiaosong.me/windows/winrar-compression-exclude-files-or-directories
  • choclover
  • choclover
  • 2014-06-14 10:25:56
  • 3132

winrar右键压缩包不能解压的问题

今天忽然遇到了一个问题,就是在
  • u011458469
  • u011458469
  • 2014-05-18 20:54:47
  • 836

winrar如何把很多文件分别压缩成独立的压缩包

对多个文件选中后点右键,出现菜单,选择 添加到压缩文件 选项 然后选择到 如下图 文件 的选项 把下面 的“把每个文件放到单独的压缩文件中”点击确定就可以把多个文件分别压缩成独...
  • forest_fire
  • forest_fire
  • 2017-05-31 14:52:10
  • 984

WinRar 使用方法参数设置

winzip现在完全支持命令行方式的了,只需要下个WinZip Command Line Support Add-On Version 1.0(http://www.winzip.com/wzclin...
  • yjyb
  • yjyb
  • 2006-11-12 11:48:00
  • 1495
收藏助手
不良信息举报
您举报文章:winrar 压缩
举报原因:
原因补充:

(最多只允许输入30个字)