日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#中關于zip壓縮解壓幫助類的封裝

之前一個同學問了這個問題后,看了園子里其它園友的封裝,都很零碎,調用也不是很方便。所以自己就封裝了一個zip解壓的類。后來想整理下怕自己忘了。就把壓縮的類也一并封裝了。

創(chuàng)新互聯(lián)建站服務項目包括托克托網(wǎng)站建設、托克托網(wǎng)站制作、托克托網(wǎng)頁制作以及托克托網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,托克托網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到托克托省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

c#下壓縮解壓,主要是用第三方類庫進行封裝的。ICSharpCode.SharpZipLib.dll類庫,鏈接地址為你官方下載鏈接。壓縮主要是用流的方式進行壓縮的。

壓縮文件及文件夾。文件壓縮很簡單,把待壓縮的文件用流的方式讀到內存中,然后放到壓縮流中。就可以了。文件夾就稍微麻煩下了。因為要把待壓縮的文件夾解壓后保留文件夾文件的層次結構。所以我的實現(xiàn)方式就是 遞歸遍歷文件夾中的文件。計算其相對位置放到壓縮流中。

代碼如下

 
 
 
  1. ///   
  2.         /// 壓縮文件或者文件夾  
  3.         ///   
  4.         /// 壓縮后文件的存放路徑   如C:\\windows\abc.zip  
  5.         ///   
  6.         public bool CompressionZip(string _depositPath)  
  7.         {  
  8.             bool result = true;  
  9.             FileStream fs = null;  
  10.             try 
  11.             {  
  12.                 ZipOutputStream ComStream = new ZipOutputStream(File.Create(_depositPath));  
  13.                 ComStream.SetLevel(9);      //壓縮等級  
  14.                 foreach (string path in AbsolutePaths)  
  15.                 {  
  16.                     //如果是目錄  
  17.                     if (Directory.Exists(path))  
  18.                     {  
  19.                         ZipFloder(path, ComStream, path);  
  20.                     }  
  21.                     else if (File.Exists(path))//如果是文件  
  22.                     {  
  23.                          fs = File.OpenRead(path);  
  24.                         byte[] bts = new byte[fs.Length];  
  25.                         fs.Read(bts, 0, bts.Length);  
  26.                         ZipEntry ze = new ZipEntry(new FileInfo(path).Name);  
  27.                         ComStream.PutNextEntry(ze);             //為壓縮文件流提供一個容器  
  28.                         ComStream.Write(bts, 0, bts.Length);  //寫入字節(jié)  
  29.                     }  
  30.                 }  
  31.                 ComStream.Finish(); // 結束壓縮  
  32.                 ComStream.Close();  
  33.             }  
  34.             catch (Exception ex)  
  35.             {  
  36.                 if (fs != null)  
  37.                 {  
  38.                     fs.Close();  
  39.                 }  
  40.                 errorMsg = ex.Message;  
  41.                 result = false;  
  42.             }  
  43.             return result;  
  44.         }  
  45.         //壓縮文件夾  
  46.         private void ZipFloder(string _OfloderPath, ZipOutputStream zos, string _floderPath)  
  47.         {  
  48.             foreach (FileSystemInfo item in new DirectoryInfo(_floderPath).GetFileSystemInfos())  
  49.             {  
  50.                 if (Directory.Exists(item.FullName))  
  51.                 {  
  52.                     ZipFloder(_OfloderPath, zos, item.FullName);  
  53.                 }  
  54.                 else if (File.Exists(item.FullName))//如果是文件  
  55.                 {  
  56.                     DirectoryInfo ODir = new DirectoryInfo(_OfloderPath);  
  57.                     string fullName2 = new FileInfo(item.FullName).FullName;  
  58.                     string path = ODir.Name + fullName2.Substring(ODir.FullName.Length, fullName2.Length - ODir.FullName.Length);//獲取相對目錄  
  59.                     FileStream fs = File.OpenRead(fullName2);  
  60.                     byte[] bts = new byte[fs.Length];  
  61.                     fs.Read(bts, 0, bts.Length);  
  62.                     ZipEntry ze = new ZipEntry(path);  
  63.                     zos.PutNextEntry(ze);             //為壓縮文件流提供一個容器  
  64.                     zos.Write(bts, 0, bts.Length);  //寫入字節(jié)  
  65.                 }  
  66.             }  
  67.         } 

關于解壓  解壓就簡單多了。有文件解壓文件,有文件夾 遍歷,解壓其中的文件。解壓的文件中已經(jīng)包含了其與文件夾的層次關系。

 
 
 
  1. ///   
  2.         /// 解壓  
  3.         ///   
  4.         /// 壓縮文件路徑  
  5.         /// 解壓的路徑  
  6.         ///   
  7.         public bool DeCompressionZip(string _depositPath, string _floderPath)  
  8.         {  
  9.             bool result = true;  
  10.             FileStream fs=null;  
  11.             try 
  12.             {  
  13.                 ZipInputStream InpStream = new ZipInputStream(File.OpenRead(_depositPath));  
  14.                 ZipEntry ze = InpStream.GetNextEntry();//獲取壓縮文件中的每一個文件  
  15.                 Directory.CreateDirectory(_floderPath);//創(chuàng)建解壓文件夾  
  16.                 while (ze != null)//如果解壓完ze則是null  
  17.                 {  
  18.                     if (ze.IsFile)//壓縮zipINputStream里面存的都是文件。帶文件夾的文件名字是文件夾\\文件名  
  19.                     {  
  20.                         string[] strs=ze.Name.Split('\\');//如果文件名中包含’\\‘則表明有文件夾  
  21.                         if (strs.Length > 1)  
  22.                         {  
  23.                             //兩層循環(huán)用于一層一層創(chuàng)建文件夾  
  24.                             for (int i = 0; i < strs.Length-1; i++)  
  25.                             {  
  26.                                 string floderPath=_floderPath;  
  27.                                 for (int j = 0; j < i; j++)  
  28.                                 {  
  29.                                     floderPath = floderPath + "\\" + strs[j];  
  30.                                 }  
  31.                                 floderPath=floderPath+"\\"+strs[i];  
  32.                                 Directory.CreateDirectory(floderPath);  
  33.                             }  
  34.                         }  
  35.                          fs = new FileStream(_floderPath+"\\"+ze.Name, FileMode.OpenOrCreate, FileAccess.Write);//創(chuàng)建文件  
  36.                         //循環(huán)讀取文件到文件流中  
  37.                         while (true)  
  38.                         {  
  39.                             byte[] bts = new byte[1024];  
  40.                            int i= InpStream.Read(bts, 0, bts.Length);  
  41.                            if (i > 0)  
  42.                            {  
  43.                                fs.Write(bts, 0, i);  
  44.                            }  
  45.                            else 
  46.                            {  
  47.                                fs.Flush();  
  48.                                fs.Close();  
  49.                                break;  
  50.                            }  
  51.                         }  
  52.                     }  
  53.                     ze = InpStream.GetNextEntry();  
  54.                 }  
  55.             }  
  56.             catch (Exception ex)  
  57.             {  
  58.                 if (fs != null)  
  59.                 {  
  60.                     fs.Close();  
  61.                 }  
  62.                 errorMsg = ex.Message;  
  63.                 result = false;  
  64.             }  
  65.             return result;  
  66.         } 

最后做個總結。C#作為高級語言,其強大的類庫和第三方提供的類庫??梢宰龊芏嗍虑?。但也有弊端,用第三方類庫性能不是很高。我壓縮幾百M的東西。cpu瞬間跑到50%多。比360壓縮和zip壓縮性能差遠了。所以此類也就適用壓縮比較小的東西。

完整例子下載地址

原文鏈接:http://www.cnblogs.com/Bonker/archive/2012/12/25/2831970.html

【編輯推薦】

  1. 這也是C#代碼嗎?代碼閱讀性進階
  2. C#網(wǎng)絡編程系列一:網(wǎng)絡協(xié)議簡介
  3. C#網(wǎng)絡編程系列二:HTTP協(xié)議詳解
  4. C#網(wǎng)絡編程系列三:自定義Web服務器
  5. C#網(wǎng)絡編程系列四:自定義Web瀏覽器

名稱欄目:C#中關于zip壓縮解壓幫助類的封裝
URL地址:http://www.5511xx.com/article/djshcjg.html