【C#公共幫助類】WinRarHelper幫助類,實現文件或文件夾壓縮和解壓,實戰乾貨

  本文檔使用WinRAR方式來進行簡單的壓縮和解壓動做,純乾貨,實際項目這種壓縮方式用的少一點,通常我會使用第三方的壓縮dll來實現,就如同我上一個壓縮類博客,壓縮的是zip文件http://www.cnblogs.com/wohexiaocai/p/5469253.html,實際項目中也會用到rar壓縮,因此總結了一下代碼,以後簡單的幾個函數。html

  歡迎傳播分享,必須保持原做者的信息,但禁止將該文檔直接用於商業盈利。編程

  本人自從幾年前走上編程之路,一直致力於收集和總結出好用的框架和通用類庫,無論是微軟本身的仍是第三方的只要實際項目中好用且能夠解決實際問題那都會收集好,編寫好文章和別人一塊兒分享,這樣本身學到了,別人也能學到知識,當今社會很須要知識的搬運工。瀏覽器

     Email:707055073@qq.com
服務器

  本文章地址:http://www.cnblogs.com/wohexiaocai/p/5475506.htmlapp

1.基本介紹

      通常BS的項目咱們都有一個功能叫作【下載excel】,或者【下載word】,下載excel通常都是根據查詢條件查詢獲得明細數據,生成excel,通過壓縮返回文件流響應瀏覽器進行下載動做,因此這個小功能就須要用到壓縮和生成excel的兩個知識點,今天我分享一下rar壓縮在實際項目的用途。框架

  rar壓縮文件須要在服務器安裝程序,可是通常服務器都會使用他來做爲壓縮工具的,我在阿里雲的ECS也是默認就用的這個,服務器安裝一下就能夠了ide

  rar的優勢函數

  1. 安裝包很是好
  2. 提供很好的技術文檔
  3. 經過命令的方式進行壓縮,編寫程序較爲簡單
  4. 使用廣泛

2.實際項目

  1. 檢查電腦是否安裝了WinRAR
  2. 文件或者文件夾壓縮
  3. 文件解壓到文件夾中
  4. 等等

2.1 檢查電腦有沒有安裝WinRAR

這裏獲取到WinRAR的安裝路徑,最好的辦法就是讀取註冊表,從註冊表獲取到他的安裝全路徑工具

64位系統WinRAR註冊表路徑是:SOFTWARE\Wow6432Node\WinRAR測試

32位系統WinRAR註冊表路徑是:SOFTWARE\WinRAR

他們都在註冊表的【HKEY_LOCAL_MACHINE】節點下面,因此你須要打開註冊表命令(regedit),來檢查服務器WinRAR有沒有安裝。

2.2 壓縮文件/文件夾

 上面第一步完成了,須要就能夠開始壓縮了,這裏腦部一下須要經過命令的模式來調用WinRAR,rar命令說明文檔下載:http://files.cnblogs.com/files/wohexiaocai/WinRAR.zip

   例子命令

  1. 添加文件夾 "c:\latest data" 到壓縮文件 Info.rar 中

WinRAR a Info.rar "c:\latest data"

  1. 解壓壓縮文件 Info.rar 到文件夾 d:\data

WinRAR x Info.rar d:\data\

 

2.3 解壓文件到指定的文件夾路徑

        /// <summary>
        /// 解壓到某個文件夾中
        /// </summary>
        /// <param name="rarFilePath">rar文件全路徑</param>
        /// <param name="unRarPath">解壓到哪一個文件夾</param>
        /// <param name="password">解壓密碼</param>
        /// <param name="isOverride">是否覆蓋</param>
        public void UnRar(string rarFilePath, string unRarPath, string password = null, bool isOverride = false)

  註釋也寫得很詳細的,因此使用的時候不再用擔憂這個方法的參數應該怎麼傳值,我用過不少第三方的dll,調用的時候好費勁傳參數,不知道到底應該傳什麼,一點都不方便,因此我寫代碼通常都喜歡用源碼進行調試,不喜歡引用dll,源碼我能夠調試出bug。

3.調用代碼參考

因爲這個幫助類不是靜態的,因此須要實例化

 // 實例化就已經獲得系統WinRAR的安裝路徑了
 WinRarHelper rarHelper = new WinRarHelper();
 // 這裏能夠指定rar實際的安裝路徑
 // rarHelper.WinRarPath = "";
 // 壓縮
 rarHelper.Rar(@"C:\Users\yhl\Desktop\單號圖片", @"C:\Users\yhl\Desktop\單號圖片.rar");
 // 解壓
 rarHelper.UnRar(@"C:\Users\yhl\Desktop\單號圖片.rar", @"C:\Users\yhl\Desktop\單號圖片");

下面仍是調用經常使用的方法,就能夠了。

4.WinRarHelper下載

  1 //-------------------------------------------------------------------------------------
  2 // All Rights Reserved , Copyright (C) 2016 , ZTO , Ltd .
  3 //-------------------------------------------------------------------------------------
  4 
  5 using System;
  6 using System.Diagnostics;
  7 using System.IO;
  8 using Microsoft.Win32;
  9 
 10 namespace ZTO.TestDb
 11 {
 12     /// <summary>
 13     /// WinRAR壓縮操做幫助類
 14     ///
 15     /// 修改紀錄
 16     ///
 17     ///          2016-5-9  版本:1.0 YangHengLian 建立主鍵,注意命名空間的排序,測試很是好。
 18     ///       2016-5-13 加上了自動獲取WinRAR安裝路徑的函數,無論是64位仍是32位系統,
 19     /// 
 20     /// 版本:1.0
 21     ///
 22     /// <author>
 23     ///        <name>YangHengLian</name>
 24     ///        <date>2016-5-9</date>
 25     /// </author>
 26     /// </summary>
 27     public class WinRarHelper
 28     {
 29         #region 屬性
 30         private string _winRarPath;
 31 
 32         /// <summary>
 33         /// WinRAR安裝路徑,能夠本身設置,默認讀取系統註冊表
 34         /// </summary>
 35         public string WinRarPath
 36         {
 37             get
 38             {
 39                 return string.IsNullOrEmpty(_winRarPath) ? GetWinRarInstallPath() : _winRarPath;
 40             }
 41             set
 42             {
 43                 _winRarPath = value;
 44             }
 45         }
 46         #endregion
 47 
 48         /// <summary>
 49         /// 解壓到某個文件夾中
 50         /// </summary>
 51         /// <param name="rarFilePath">rar文件全路徑</param>
 52         /// <param name="unRarPath">解壓到哪一個文件夾</param>
 53         /// <param name="password">解壓密碼</param>
 54         /// <param name="isOverride">是否覆蓋</param>
 55         public void UnRar(string rarFilePath, string unRarPath, string password = null, bool isOverride = false)
 56         {
 57             if (IsSetUpWinRar())
 58             {
 59                 throw new ArgumentNullException("WinRAR未安裝");
 60             }
 61             RunCmd(string.Format("x{0} -o{1} {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), rarFilePath, unRarPath));
 62         }
 63 
 64         /// <summary>
 65         /// 壓縮文件或者文件夾爲壓縮包
 66         /// </summary>
 67         /// <param name="filePath">須要壓縮的文件/文件夾全路徑</param>
 68         /// <param name="saveFilePath">壓縮文件保存全路徑</param>
 69         /// <param name="isOverride">是否覆蓋</param>
 70         /// <param name="password">壓縮文件密碼</param>
 71         public void Rar(string filePath, string saveFilePath, bool isOverride = false, string password = null)
 72         {
 73             if (IsSetUpWinRar())
 74             {
 75                 throw new ArgumentNullException("WinRAR未安裝");
 76             }
 77             RunCmd(string.Format("a{0} -o{1} -ep2 -r {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), saveFilePath, filePath));
 78         }
 79 
 80         /// <summary>
 81         /// 解壓是否安裝了WinRAR程序
 82         /// </summary>
 83         /// <returns></returns>
 84         public bool IsSetUpWinRar()
 85         {
 86             if (!string.IsNullOrEmpty(WinRarPath))
 87             {
 88                 return File.Exists(WinRarPath);
 89             }
 90             var inistallPath = GetWinRarInstallPath();
 91             if (string.IsNullOrEmpty(inistallPath))
 92             {
 93                 return false;
 94             }
 95             WinRarPath = inistallPath;
 96             return true;
 97         }
 98 
 99         /// <summary>
100         /// 從註冊表中獲取WinRAR的安裝路徑
101         /// </summary>
102         /// <returns></returns>
103         public string GetWinRarInstallPath()
104         {
105             var openKey = @"SOFTWARE\Wow6432Node\WinRAR";//64位註冊表
106             if (IntPtr.Size == 4)
107             {
108                 openKey = @"SOFTWARE\WinRAR";//32位註冊表路徑
109             }
110             RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey);
111             if (appPath != null)
112             {
113                 // WinRAR安裝具體路徑
114                 string path = appPath.GetValue("exe32").ToString();
115                 if (File.Exists(path))
116                 {
117                     return path;
118                 }
119             }
120             return null;
121         }
122 
123         /// <summary>
124         /// 執行rar內部命令
125         /// </summary>
126         /// <param name="cmd">要執行的命令</param>
127         public void RunCmd(string cmd)
128         {
129             using (var p = new Process())
130             {
131                 p.StartInfo.FileName = WinRarPath;
132                 p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
133                 p.StartInfo.Arguments = cmd;
134                 p.Start();
135                 p.WaitForExit();
136             }
137         }
138     }
139 }
WinRarHelper
相關文章
相關標籤/搜索