C# ICSharpCode.SharpZipLib

C# 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 ZipHelper

13     {

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                 else

30                 {

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                         do

40                         {

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 }
复制代码

 

 

 

 

 

 

分类:  后台开发日记

你可能感兴趣的:(code)