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 }

