利用 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        }

上面代码需要引用:

using ICSharpCode.SharpZipLib.Zip;
using System.IO;

使用方法就不介绍了。

你可以到其官方网站下载最新版本的SharpZipLib:

http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
或者直接使用该链接下载:

  • Compiled assembly with documentation and install scripts Download [488 KB]
  • Source code and samples Download [622 KB]
  • Help file only Download [485 KB]
posted on 2005-12-23 11:39  RubyPDF  阅读(14736)  评论(34编辑  收藏  举报