C#, SharpZip 應用

C#, SharpZip 應用

 

C# 程式要處理壓縮檔,大致上都會選擇好用的 SharpZip 
SharpZip 支援 ZIP, GZip, Tar, BZip2 格式 
其文件說明豐富, API 還算簡捷 
雖然本身提供了 FastZip 簡單易用,但是只有以下功能 
1. 壓縮某個資料夾成為 ZIP 檔案 
2. 解縮某個 ZIP 檔案到指定資料夾

如果想要對不同資料夾內許多檔案做壓縮處理,或是將 ZIP 內某個檔案取出 
甚至只是想壓縮成 System.IO.Stream 資料流而不想儲存成檔案 
FastZip 都無法處理 
必須以 ZipOutputStream 類別來處理上述工作,建立整個機制卻不是那麼快

天秤寫了函式將 ZipOutputStream 類別包起來 
提供單一函式呼叫就可以來處理上述的動作

函式使用如下 
提供二個壓縮函式,六個解壓縮函式
  1. /// <summary>   
  2.  /// 壓縮檔案成 ZIP   
  3.  /// </summary>   
  4.  /// <param name="zipFilename">ZIP 檔名</param>   
  5.  /// <param name="filenames">壓檔的檔案</param>   
  6.  public static bool Zip(string zipFilename, string[] filenames)   
  7.    
  8.  /// <summary>   
  9.  /// 壓縮檔案成 ZIP   
  10.  /// </summary>   
  11.  /// <param name="filenames">壓縮的檔案</param>   
  12.  public static System.IO.Stream Zip(string[] filenames)   
  13.    
  14.  /// <summary>   
  15.  /// 從 ZIP 中解出特定檔案並回傳 ZipFileInfo 結構   
  16.  /// </summary>   
  17.  /// <param name="zipFilename">ZIP 壓縮檔</param>   
  18.  /// <param name="filenames">欲解出的檔案</param>   
  19.  public static ZipFileInfo[] Unzip(string zipFilename, string[] filenames)   
  20.    
  21.  /// <summary>   
  22.  /// 從 ZIP 中解出特定檔案並回傳 ZipFileInfo 結構   
  23.  /// </summary>   
  24.  /// <param name="stream">ZIP 壓縮檔資料流</param>   
  25.  /// <param name="filenames">欲解出的檔案</param>   
  26.  public static ZipFileInfo[] Unzip(System.IO.Stream stream, string[] filenames)   
  27.    
  28.  /// <summary>   
  29.  /// 從 ZIP 中解出特定檔案到指定目錄   
  30.  /// 指定目錄必須在目錄字串最後補上 '\\' 字元,否則會被當成檔案處理   
  31.  /// </summary>   
  32.  /// <param name="zipFilename">ZIP 壓縮檔</param>   
  33.  /// <param name="filenames">欲解出的檔案</param>   
  34.  /// <param name="folder">儲存的目錄</param>   
  35.  /// <param name="isCreateSubFolder">是否依壓縮檔目錄結構建立子目錄 ( false 時則全部塞在 folder 目錄下)</param>   
  36.  public static bool Unzip(string zipFilename, string[] filenames, string folder, bool isCreateSubFolder)   
  37.    
  38.  /// <summary>   
  39.  /// 從 ZIP 中解出特定檔案到指定目錄   
  40.  /// 指定目錄必須在目錄字串最後補上 '\\' 字元,否則會被當成檔案處理   
  41.  /// </summary>   
  42.  /// <param name="stream">ZIP 壓縮檔資料流</param>   
  43.  /// <param name="filenames">欲解出的檔案</param>   
  44.  /// <param name="folder">儲存的目錄</param>   
  45.  /// <param name="isCreateSubFolder">是否依壓縮檔目錄結構建立子目錄 ( false 時則全部塞在 folder 目錄下)</param>   
  46.  public static bool Unzip(System.IO.Stream stream, string[] filenames, string folder, bool isCreateSubFolder)   
  47.    
  48.  /// <summary>   
  49.  /// 解壓縮全部檔案到指定目錄下   
  50.  /// </summary>   
  51.  /// <param name="zipFilename">ZIP 壓縮檔</param>   
  52.  /// <param name="folder">儲存的目錄</param>   
  53.  public static bool Unzip(string zipFilename, string folder)   
  54.    
  55.  /// <summary>   
  56.  /// 解壓縮全部檔案到指定目錄下   
  57.  /// </summary>   
  58.  /// <param name="stream">ZIP 壓縮檔資料流</param>   
  59.  /// <param name="folder">儲存的目錄</param>   
  60.  public static bool Unzip(System.IO.Stream stream, string folder)  
  61.    
使用方法

下載原始碼: FileEx.cs 
下載 SharpZip 式庫及 FileEx.cs 檔案 
將 SharpZip 加入參考,並加上 FileEx.cs 程式碼即可使用,以下為簡單的壓縮解壓縮範例

  1. // 壓縮 c:\a.txt, c:\b.txt 及 c:\temp 目錄成 c:\c.zip 檔案  
  2. RichieTools.FileEx.Zip("C:\\c.zip"new string[] { "c:\\a.txt""c:\\b.txt""c:\\temp\\" } );  
  3. // 解壓縮 c:\c.zip 全部檔案到 c:\test 目錄下  
  4. RichieTools.FileEx.Unzip("c:\\c.zip""c:\\text\\");