利用 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![](/Images/OutliningIndicators/None.gif)
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![](/Images/OutliningIndicators/InBlock.gif)
33
ZipInputStream s = new ZipInputStream(File.OpenRead(file));
34![](/Images/OutliningIndicators/InBlock.gif)
35
ZipEntry theEntry;
36
while ((theEntry = s.GetNextEntry()) != null)
37
{
38![](/Images/OutliningIndicators/InBlock.gif)
39
string directoryName = Path.GetDirectoryName(theEntry.Name);
40
string fileName = Path.GetFileName(theEntry.Name);
41![](/Images/OutliningIndicators/InBlock.gif)
42
if (directoryName != String.Empty)
43
Directory.CreateDirectory(dir + directoryName);
44![](/Images/OutliningIndicators/InBlock.gif)
45
if (fileName != String.Empty)
46
{
47
FileStream streamWriter = File.Create(dir + theEntry.Name);
48![](/Images/OutliningIndicators/InBlock.gif)
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![](/Images/OutliningIndicators/InBlock.gif)
64
streamWriter.Close();
65
}
66
}
67
s.Close();
68
return true;
69
}
70
catch (Exception)
71
{
72
throw;
73
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
26
![](/Images/OutliningIndicators/None.gif)
27
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
上面代码需要引用:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
使用方法就不介绍了。
你可以到其官方网站下载最新版本的SharpZipLib:
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
或者直接使用该链接下载: