前言
成都創(chuàng)新互聯(lián)公司是專業(yè)的金沙網(wǎng)站建設(shè)公司,金沙接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金沙網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!今天梳理一下項(xiàng)目中用到的壓縮、解壓文件夾或文件的方法,發(fā)現(xiàn)因?yàn)樾枨蟛煌?,已?jīng)用了好幾個(gè)不同組件。今天就好好整理記錄下,別下次遇到需求又重頭開始了。
DotNetZip
DotNetZip是一個(gè)開源的免費(fèi)類庫(kù),主要提供了快速操作zip文件的工具集,VB、C#任何.Net語(yǔ)言都可以通過(guò)它創(chuàng)建、解壓縮zip文件。我使用該類庫(kù)最主要的目的還是因?yàn)樗梢詣?chuàng)建帶密碼保護(hù)的壓縮文件。
只有設(shè)置了zip.Password = "password"之后,被壓縮的文件才會(huì)有密碼保護(hù)
////// 壓縮文件/文件夾 /// /// 需要壓縮的文件/文件夾路徑 /// 壓縮文件路徑(zip后綴) /// 密碼 /// 需要過(guò)濾的文件后綴名 public static void CompressionFile(string filePath, string zipPath, string password = "", ListfilterExtenList = null) { try { using (ZipFile zip = new ZipFile(Encoding.UTF8)) { if (!string.IsNullOrWhiteSpace(password)) { zip.Password = password; } if (Directory.Exists(filePath)) { if (filterExtenList == null) zip.AddDirectory(filePath); else AddDirectory(zip, filePath, filePath, filterExtenList); } else if (File.Exists(filePath)) { zip.AddFile(filePath,""); } zip.Save(zipPath); } } catch (Exception ex) { throw ex; } } /// /// 添加文件夾 /// /// ZipFile對(duì)象 /// 需要壓縮的文件夾路徑 /// 根目錄路徑 /// 需要過(guò)濾的文件后綴名 public static void AddDirectory(ZipFile zip, string dirPath, string rootPath, ListfilterExtenList) { var files = Directory.GetFiles(dirPath); for (int i = 0; i < files.Length; i++) { //如果Contains不支持第二個(gè)參數(shù),就用.ToLower() if (filterExtenList == null || (filterExtenList != null && !filterExtenList.Any(d => Path.GetExtension(files[i]).Contains(d, StringComparison.OrdinalIgnoreCase)))) { //獲取相對(duì)路徑作為zip文件中目錄路徑 zip.AddFile(files[i], Path.GetRelativePath(rootPath, dirPath)); //如果沒(méi)有Path.GetRelativePath方法,可以用下面代碼替換 //string relativePath = Path.GetFullPath(dirPath).Replace(Path.GetFullPath(rootPath), ""); //zip.AddFile(files[i], relativePath); } } var dirs = Directory.GetDirectories(dirPath); for (int i = 0; i < dirs.Length; i++) { AddDirectory(zip, dirs[i], rootPath, filterExtenList); } }