標籤:dotnetzip壓縮 c#壓縮檔 c#壓縮多個檔案 dotnetzip 壓縮中文亂碼
有些項目為了更好的使用者體驗,會把下載檔案做成一個壓縮的檔案,直接下載,免得去一個個的點擊下載檔案。網上有很多壓縮檔的方法,也有第三方的分裝DLL檔案,本文主要介紹DotNetZip壓縮方法。
DotNetZip的DLl:http://download.csdn.net/detail/lilinoscar/8295255
官網:http://dotnetzip.codeplex.com/
解決DotNetZip壓縮中文名稱亂碼,只需要在執行個體化時設定編碼:System.Text.Encoding.Default
即:ZipFile zip = new ZipFile(System.Text.Encoding.Default)。
解決DotNetZip壓縮後的檔案有多層目錄:zip.AddFile(file,"");
AddFile加上第二個參數即可去掉多層的檔案夾。
#region bool SaveFile(string filePath, byte[] bytes) 檔案儲存, /// <summary> /// 檔案儲存,特別是有些檔案放到資料庫,可以直接從資料取二進位,然後儲存到指定檔案夾 /// </summary> /// <param name="filePath">儲存檔案地址</param> /// <param name="bytes">檔案二進位</param> /// <returns></returns> public static bool SaveFile(string filePath, byte[] bytes) { bool result = true; try { using (var fileStream = new FileStream(filePath, FileMode.Create)) { fileStream.Write(bytes, 0, bytes.Length); } } catch (Exception) { result = false; } return result; } #endregion #region 判斷檔案夾是否存在 /// <summary> /// 判斷檔案夾是否存在 /// </summary> /// <param name="path">檔案夾地址</param> /// <returns></returns> public static bool directoryExist(string path) { if (!string.IsNullOrEmpty(path) && Directory.Exists(path)) { return true; } return false; } #endregion #region 建立檔案夾 /// <summary> /// 建立檔案夾 /// </summary> /// <param name="path">檔案地址</param> /// <returns></returns> public static bool directoryAdd(string path) { if (!string.IsNullOrEmpty(path) && !Directory.Exists(path)) { Directory.CreateDirectory(path); //建立檔案夾 return true; } return false; } #endregion #region 擷取壓縮後的檔案路徑 /// <summary> /// 擷取壓縮後的檔案路徑 /// </summary> /// <param name="dirPath">壓縮的檔案路徑</param> /// <param name="filesPath">多個檔案路徑</param> /// <returns></returns> public static string GetCompressPath(string dirPath, List<string> filesPath) { var zipPath = "";//返回壓縮後的檔案路徑 using (ZipFile zip = new ZipFile(System.Text.Encoding.Default)) //System.Text.Encoding.Default設定中文附件名稱亂碼,不設定會出現亂碼 { foreach (var file in filesPath) { zip.AddFile(file,""); //第二個參數為空白,說明壓縮的檔案不會存在多層檔案夾。比如C:\test\a\b\c.doc 壓縮後解壓檔案會出現c.doc //如果改成zip.AddFile(file);則會出現多層檔案夾壓縮,比如C:\test\a\b\c.doc 壓縮後解壓檔案會出現test\a\b\c.doc } zipPath = string.Format("{0}\\{1}.zip", dirPath, DateTime.Now.ToString("yyyyMMddHHmmss")); zip.Save(zipPath); } return zipPath; } #endregion
調用:
List<string> filesPath = new List<string>(); filesPath.Add(“C:/test/a.doc”); filesPath.Add(“C:/test/b.doc”); //filesPath.Add(Server.MapPath("~/text/Files/c.doc"));//可以設定添加虛擬路徑 var dirPath="Server.MapPath("~/compress/")"; var filePath=GetCompressPath(dirPath,filesPath);//返回壓縮的檔案
C# DotNetZip壓縮單、多檔案以及檔案夾