你的位置:首页 > ASP.net教程

[ASP.net教程]ICSharpCode.SharpZipLib.dll文件压缩类整理


工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的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.cnblogs.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 }