工作中我們很多時候需要進行對文件進行壓縮,比較通用的壓縮的dll就是ICSharpCode.SharpZipLib.dll,廢話不多了,網上也有很多的資料,我將其最常用的兩個函數整理了一下,提供了一個通用的類,這樣在工作中可以快速的完成壓縮和解壓縮的動作哦
官網下載地址:http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
1. 在項目中添加對ICSharpCode.SharpZipLib.dll的引用;
2. 在需要使用到ICSharpCode.SharpZipLib中定義的類的編碼界面中將其導入(Imports)
1 using ICSharpCode.SharpZipLib.Zip; 2 using System; 3 using System.IO; 4 5 namespace ZTO.WayBill.Utilities 6 { 7 /// <summary> 8 /// 壓縮類 9 /// http://www.49028c.com/kissdodog/p/3525295.html 10 11 /// </summary>12 public class ZipHelper13 {14 /// <summary>15 /// 壓縮文件夾16 /// </summary>17 /// <param name="source">源目錄</param>18 /// <param name="s">ZipOutputStream對象</param>19 public static void ComPRess(string source, ZipOutputStream s)20 {21 string[] filenames = Directory.GetFileSystemEntries(source);22 foreach (string file in filenames)23 {24 if (Directory.Exists(file))25 {26 // 遞歸壓縮子文件夾27 Compress(file, s);28 }29 else30 {31 using (FileStream fs = File.OpenRead(file))32 {33 byte[] buffer = new byte[4 * 1024];34 // 此處去掉盤符,如D:/123/1.txt 去掉D:35 ZipEntry entry = new ZipEntry(file.Replace(Path.GetPathRoot(file), ""));36 entry.DateTime = DateTime.Now;37 s.PutNextEntry(entry);38 int sourceBytes;39 do40 {41 sourceBytes = fs.Read(buffer, 0, buffer.Length);42 s.Write(buffer, 0, sourceBytes);43 } while (sourceBytes > 0);44 }45 }46 }47 }48 49 /// <summary>50 /// 解壓縮51 /// </summary>52 /// <param name="sourceFile">壓縮包完整路徑地址</param>53 /// <param name="targetPath">解壓路徑是哪里</param>54 /// <returns></returns>55 public static bool Decompress(string sourceFile, string targetPath)56 {57 if (!File.Exists(sourceFile))58 {59 throw new FileNotFoundException(string.Format("未能找到文件 '{0}' ", sourceFile));60 }61 if (!Directory.Exists(targetPath))62 {63 Directory.CreateDirectory(targetPath);64 }65 using (var s = new ZipInputStream(File.OpenRead(sourceFile)))66 {67 ZipEntry theEntry;68 while ((theEntry = s.GetNextEntry()) != null)69 {70 if (theEntry.IsDirectory)71 {72 continue;73 }74 string directorName = Path.Combine(targetPath, Path.GetDirectoryName(theEntry.Name));75 string fileName = Path.Combine(directorName, Path.GetFileName(theEntry.Name));76 if (!Directory.Exists(directorName))77 {78 Directory.CreateDirectory(directorName);79 }80 if (!String.IsNullOrEmpty(fileName))81 {82 using (FileStream streamWriter = File.Create(fileName))83 {84 int size = 4096;85 byte[] data = new byte[size];86 while (size > 0)87 {88 streamWriter.Write(data, 0, size);89 size = s.Read(data, 0, data.Length);90 }91 }92 }93 }94 }95 return true;96 }97 }98 }
新聞熱點
疑難解答