(一). 实现功能
对文件及目录的压缩及解压功能
(二). 运行图片示例

(三).代码
1. 压缩类
1
/// <summary>
2
/// 压缩类
3
/// </summary>
4
public class ZipClass
5
{
6
public static void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
7
{
8
//如果文件没有找到,则报错
9
if (!System.IO.File.Exists(FileToZip))
10
{
11
throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
12
}
13
14
System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
15
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
16
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
17
ZipEntry ZipEntry = new ZipEntry("ZippedFile");
18
ZipStream.PutNextEntry(ZipEntry);
19
ZipStream.SetLevel(CompressionLevel);
20
byte[] buffer = new byte[BlockSize];
21
System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
22
ZipStream.Write(buffer, 0, size);
23
try
24
{
25
while (size < StreamToZip.Length)
26
{
27
int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
28
ZipStream.Write(buffer, 0, sizeRead);
29
size += sizeRead;
30
}
31
}
32
catch (System.Exception ex)
33
{
34
throw ex;
35
}
36
ZipStream.Finish();
37
ZipStream.Close();
38
StreamToZip.Close();
39
}
40
41
/// <summary>
42
/// 压缩目录
43
/// </summary>
44
/// <param name="args">数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)</param>
45
public static void ZipFileDictory(string[] args)
46
{
47
string[] filenames = Directory.GetFiles(args[0]);
48
49
Crc32 crc = new Crc32();
50
ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
51
s.SetLevel(6);
52
foreach (string file in filenames)
53
{
54
//打开压缩文件
55
FileStream fs = File.OpenRead(file);
56
57
byte[] buffer = new byte[fs.Length];
58
fs.Read(buffer, 0, buffer.Length);
59
ZipEntry entry = new ZipEntry(file);
60
61
entry.DateTime = DateTime.Now;
62
63
entry.Size = fs.Length;
64
fs.Close();
65
66
crc.Reset();
67
crc.Update(buffer);
68
69
entry.Crc = crc.Value;
70
71
s.PutNextEntry(entry);
72
73
s.Write(buffer, 0, buffer.Length);
74
75
}
76
77
s.Finish();
78
s.Close();
79
}
80
81
/// <summary>
82
/// 压缩文件
83
/// </summary>
84
/// <param name="FileToZip">要进行压缩的文件名</param>
85
/// <param name="ZipedFile">压缩后生成的压缩文件名</param>
86
public static void ZipFile(string FileToZip, string ZipedFile)
87
{
88
//如果文件没有找到,则报错
89
if (!File.Exists(FileToZip))
90
{
91
throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
92
}
93
FileStream fs = File.OpenRead(FileToZip);
94
byte[] buffer = new byte[fs.Length];
95
fs.Read(buffer, 0, buffer.Length);
96
fs.Close();
97
98
FileStream ZipFile = File.Create(ZipedFile);
99
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
100
ZipEntry ZipEntry = new ZipEntry("ZippedFile");
101
ZipStream.PutNextEntry(ZipEntry);
102
ZipStream.SetLevel(6);
103
104
ZipStream.Write(buffer, 0, buffer.Length);
105
ZipStream.Finish();
106
ZipStream.Close();
107
}
108
}
109
110
/// <summary>
111
/// 解压类
112
/// </summary>
113
public class UnZipClass
114
{
115
/// <summary>
116
/// 解压功能(解压压缩文件到指定目录)
117
/// </summary>
118
/// <param name="args">待解压的文件</param>
119
/// <param name="args">指定解压目标目录</param>
120
public static void UnZip(string[] args)
121
{
122
ZipInputStream s = new ZipInputStream(File.OpenRead(@args[0].Trim()));
123
ZipEntry theEntry;
124
string directoryName = Path.GetDirectoryName(@args[1].Trim());
125
126
if (!Directory.Exists(@args[1].Trim()))
127
{
128
Directory.CreateDirectory(directoryName);
129
}
130
while ((theEntry = s.GetNextEntry()) != null)
131
{
132
;
133
string fileName = Path.GetFileName(theEntry.Name);
134
135
if (fileName != String.Empty)
136
{
137
FileStream streamWriter = File.Create(@args[1].Trim() + fileName);
138
139
int size = 2048;
140
byte[] data = new byte[2048];
141
while (true)
142
{
143
size = s.Read(data, 0, data.Length);
144
if (size > 0)
145
{
146
streamWriter.Write(data, 0, size);
147
}
148
else
149
{
150
break;
151
}
152
}
153
154
streamWriter.Close();
155
}
156
}
157
s.Close();
158
}
159

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

2. 前台页面代码
1
<body>
2
<form id="form1" runat="server">
3
<div>
4
<asp:Label ID="Label1" runat="server" BackColor="#C0C0FF" Font-Size="XX-Large"
5
Height="44px" Text="压缩文件/文件夹示例" Width="366px"></asp:Label>
6
<asp:Panel ID="Panel1" runat="server" Height="1px" Width="369px" BackColor="#FFFFC0">
7
<table width="100%" height="100%">
8
<tr>
9
<td style=" 3px" valign="top">
10
<asp:Label ID="lbDisplay" runat="server" Text="压缩目录(from/to):" Width="153px"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
11
<br />
12
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
13
<br />
14
<asp:Button ID="btZipDictory" runat="server" OnClick="btZipDictory_Click" Text="压缩目录" /><br />
15
</td>
16
<td style=" 4px" valign="middle">
17
<asp:Label ID="Label2" runat="server" Text="解压目录(from/to):" Width="154px"></asp:Label>
18
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
19
<br />
20
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
21
<br />
22
<asp:Button ID="btUnZipDictory" runat="server" Text="解压目录" OnClick="btUnZipDictory_Click" /><br />
23
</td>
24
</tr>
25
<tr>
26
<td style=" 3px; height: 150px" valign="top">
27
<asp:Label ID="Label3" runat="server" Text="压缩文件(from/to):" Width="153px"></asp:Label>
28
<asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
29
<br />
30
<asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
31
<br />
32
<asp:Button ID="btZipFile" runat="server" Text="压缩文件" OnClick="btZipFile_Click" /><br />
33
</td>
34
<td style=" 4px; height: 150px" valign="top">
35
<asp:Label ID="Label4" runat="server" Text="解压文件(from/to):" Width="154px"></asp:Label>
36
<asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
37
<br />
38
<asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
39
<br />
40
<asp:Button ID="btUnZipFile" runat="server" Text="解压文件" OnClick="btUnZipFile_Click" /><br />
41
</td>
42
43
</tr>
44
45
</table>
46
<asp:Label ID="lbMessage" runat="server" Width="368px"></asp:Label><br />
47
<br />
48
</asp:Panel>
49
50
</div>
51
</form>
52
</body>
53

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

3. 后台页面代码
1
public partial class _Default : System.Web.UI.Page
2
{
3
protected void Page_Load(object sender, EventArgs e)
4
{
5
6
}
7
protected void btZipDictory_Click(object sender, EventArgs e)
8
{
9
string[] FilePathS = new string[2];
10
FilePathS[0] = TextBox1.Text.Trim(); //待压缩的文件目录
11
FilePathS[1] = TextBox2.Text.Trim(); //生成的目标文件
12
ZipClass.ZipFileDictory(FilePathS);
13
}
14
protected void btUnZipDictory_Click(object sender, EventArgs e)
15
{
16
string[] FilePathS = new string[2];
17
FilePathS[0] = TextBox3.Text.Trim(); //待解压的文件
18
FilePathS[1] = TextBox4.Text.Trim(); //解压目标存放目录
19
UnZipClass.UnZip(FilePathS);
20
}
21
protected void btZipFile_Click(object sender, EventArgs e)
22
{
23
string[] FilePathS = new string[2];
24
FilePathS[0] = TextBox5.Text.Trim(); //待压缩的文件
25
FilePathS[1] = TextBox6.Text.Trim(); //生成的压缩文件名
26
ZipClass.ZipFile(FilePathS[0], FilePathS[1]);
27
28
}
29
protected void btUnZipFile_Click(object sender, EventArgs e)
30
{
31
string[] FilePathS = new string[2];
32
FilePathS[0] = TextBox7.Text.Trim(); //待解压的文件
33
FilePathS[1] = TextBox8.Text.Trim(); //解压目标存放目录
34
UnZipClass.UnZip(FilePathS);
35
}
36
}
37

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

(四). 示例代码下载