利用 SharpZipLib方便地压缩和解压缩文件
最新版本的SharpZipLib(0.84)增加了很多新的功能,其中包括增加了FastZip类,这让我们可以非常方便地把一个目录压缩成一个压缩包,经测试可以很好地支持文件中包含中文以及空格的情况。
1 /// <summary>
2 /// Create a zip archive.
3 /// </summary>
4 /// <param name="filename">The filename.</param>
5 /// <param name="directory">The directory to zip.</param>
6 public static void PackFiles(string filename, string directory)
7 {
8 try
9 {
10 FastZip fz = new FastZip();
11 fz.CreateEmptyDirectories = true;
12 fz.CreateZip(filename, directory, true, "");
13 fz = null;
14 }
15 catch (Exception)
16 {
17 throw;
18 }
19 }
20
21 /// <summary>
22 /// Unpacks the files.
23 /// </summary>
24 /// <param name="file">The file.</param>
25 /// <returns>if succeed return true,otherwise false.</returns>
26 public static bool UnpackFiles(string file, string dir)
27 {
28 try
29 {
30 if (!Directory.Exists(dir))
31 Directory.CreateDirectory(dir);
32
33 ZipInputStream s = new ZipInputStream(File.OpenRead(file));
34
35 ZipEntry theEntry;
36 while ((theEntry = s.GetNextEntry()) != null)
37 {
38
39 string directoryName = Path.GetDirectoryName(theEntry.Name);
40 string fileName = Path.GetFileName(theEntry.Name);
41
42 if (directoryName != String.Empty)
43 Directory.CreateDirectory(dir + directoryName);
44
45 if (fileName != String.Empty)
46 {
47 FileStream streamWriter = File.Create(dir + theEntry.Name);
48
49 int size = 2048;
50 byte[] data = new byte[2048];
51 while (true)
52 {
53 size = s.Read(data, 0, data.Length);
54 if (size > 0)
55 {
56 streamWriter.Write(data, 0, size);
57 }
58 else
59 {
60 break;
61 }
62 }
63
64 streamWriter.Close();
65 }
66 }
67 s.Close();
68 return true;
69 }
70 catch (Exception)
71 {
72 throw;
73 }
2 /// Create a zip archive.
3 /// </summary>
4 /// <param name="filename">The filename.</param>
5 /// <param name="directory">The directory to zip.</param>
6 public static void PackFiles(string filename, string directory)
7 {
8 try
9 {
10 FastZip fz = new FastZip();
11 fz.CreateEmptyDirectories = true;
12 fz.CreateZip(filename, directory, true, "");
13 fz = null;
14 }
15 catch (Exception)
16 {
17 throw;
18 }
19 }
20
21 /// <summary>
22 /// Unpacks the files.
23 /// </summary>
24 /// <param name="file">The file.</param>
25 /// <returns>if succeed return true,otherwise false.</returns>
26 public static bool UnpackFiles(string file, string dir)
27 {
28 try
29 {
30 if (!Directory.Exists(dir))
31 Directory.CreateDirectory(dir);
32
33 ZipInputStream s = new ZipInputStream(File.OpenRead(file));
34
35 ZipEntry theEntry;
36 while ((theEntry = s.GetNextEntry()) != null)
37 {
38
39 string directoryName = Path.GetDirectoryName(theEntry.Name);
40 string fileName = Path.GetFileName(theEntry.Name);
41
42 if (directoryName != String.Empty)
43 Directory.CreateDirectory(dir + directoryName);
44
45 if (fileName != String.Empty)
46 {
47 FileStream streamWriter = File.Create(dir + theEntry.Name);
48
49 int size = 2048;
50 byte[] data = new byte[2048];
51 while (true)
52 {
53 size = s.Read(data, 0, data.Length);
54 if (size > 0)
55 {
56 streamWriter.Write(data, 0, size);
57 }
58 else
59 {
60 break;
61 }
62 }
63
64 streamWriter.Close();
65 }
66 }
67 s.Close();
68 return true;
69 }
70 catch (Exception)
71 {
72 throw;
73 }
上面代码需要引用:
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
using System.IO;
使用方法就不介绍了。
你可以到其官方网站下载最新版本的SharpZipLib:
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
或者直接使用该链接下载: