1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.IO;
5
6
using ICSharpCode.SharpZipLib.Zip;
7
8
namespace Zipper
9
{
10
public class Zipper
11
{
12
private string m_FolderPath = null;
13
14
/// <summary>
15
/// 压缩文件夹
16
/// </summary>
17
/// <param name="FolderPath"></param>
18
/// <param name="outstream"></param>
19
protected void ZipFolderUtility(string FolderPath, ZipOutputStream outstream)
20
{
21
DirectoryInfo rootfolder = new DirectoryInfo(FolderPath);
22
//压缩当前文件夹下的文件
23
foreach (FileInfo f in rootfolder.GetFiles())
24
ZipFileUtility(f.FullName, outstream);
25
//压缩子文件夹
26
foreach (DirectoryInfo childfolder in rootfolder.GetDirectories())
27
ZipFolderUtility(childfolder.FullName, outstream);
28
29
}
30
31
/// <summary>
32
/// 压缩文件
33
/// </summary>
34
/// <param name="InFilePath"></param>
35
/// <param name="outstream"></param>
36
protected void ZipFileUtility(string InFilePath, ZipOutputStream outstream)
37
{
38
FileInfo fi = new FileInfo(InFilePath);
39
40
FileStream fs = fi.OpenRead();
41
//
42
ZipEntry entry = null;
43
44
if (fi.DirectoryName == m_FolderPath)
45
entry = new ZipEntry(fi.Name);
46
else
47
entry = new ZipEntry(fi.DirectoryName.Replace(m_FolderPath+"\\",string.Empty) + "\\" + fi.Name);
48
49
entry.Size = fs.Length;
50
entry.DateTime = DateTime.Now;
51
//
52
outstream.PutNextEntry(entry);
53
//
54
int index = 0;
55
int count = 1048576;
56
57
byte[] buffer = new byte[count];
58
//
59
while ((count = fs.Read(buffer, 0, count)) != 0)
60
{
61
outstream.Write(buffer, 0, count);
62
index += count;
63
64
if (count != 1048576)
65
{
66
break;
67
}
68
}
69
70
fs.Close();
71
}
72
73
/// <summary>
74
/// 压缩文件夹
75
/// </summary>
76
/// <param name="FolderPath">文件夹路径</param>
77
/// <param name="ZipOutputFileName">压缩文件路径</param>
78
public void ZipFolder(string FolderPath, string ZipOutputFileName)
79
{
80
try
81
{
82
if (!Directory.Exists(FolderPath))
83
throw new System.IO.DirectoryNotFoundException("Folder:" + FolderPath + " Not Fount.");
84
85
if (string.IsNullOrEmpty(ZipOutputFileName))
86
ZipOutputFileName = FolderPath + ".zip";
87
88
Stream stm = new FileStream(ZipOutputFileName, FileMode.Create);
89
90
try
91
{
92
m_FolderPath = FolderPath;
93
94
ZipOutputStream zipout = new ZipOutputStream(stm);
95
96
ZipFolderUtility(FolderPath, zipout);
97
98
zipout.CloseEntry();
99
zipout.Close();
100
zipout.Finish();
101
}
102
finally
103
{
104
stm.Close();
105
}
106
}
107
catch (Exception ex)
108
{
109
System.Diagnostics.Trace.WriteLine(ex.Message);
110
}
111
}
112
113
/// <summary>
114
/// 压缩文件
115
/// </summary>
116
/// <param name="FilePath">文件路径</param>
117
/// <param name="ZipOutputFilePath">压缩文件路径</param>
118
public void ZipFile(string FilePath, string ZipOutputFilePath)
119
{
120
try
121
{
122
if (!File.Exists(FilePath))
123
throw new System.IO.FileNotFoundException("File:" + FilePath + " Not Found.");
124
125
if (string.IsNullOrEmpty(ZipOutputFilePath))
126
ZipOutputFilePath = ZipOutputFilePath.Replace(
127
System.IO.Path.GetExtension(ZipOutputFilePath), ".zip");
128
129
Stream stm = new FileStream(ZipOutputFilePath, FileMode.Create);
130
131
try
132
{
133
ZipOutputStream zipout = new ZipOutputStream(stm);
134
135
ZipFileUtility(FilePath, zipout);
136
137
zipout.CloseEntry();
138
zipout.Close();
139
zipout.Finish();
140
}
141
finally
142
{
143
stm.Close();
144
}
145
}
146
catch (Exception ex)
147
{
148
System.Diagnostics.Trace.WriteLine(ex.Message);
149
}
150
}
151
152
/// <summary>
153
/// 解压缩
154
/// </summary>
155
/// <param name="FilePath"></param>
156
public void UnZip(string FilePath,string OutputFolder)
157
{
158
if (!File.Exists(FilePath))
159
throw new FileNotFoundException("File:" + FilePath + " Not Found.");
160
161
FileInfo fi = new FileInfo(FilePath);
162
using (ZipInputStream stream = new ZipInputStream(fi.OpenRead()))
163
{
164
string foldername = null;
165
166
if (string.IsNullOrEmpty(OutputFolder))
167
foldername = fi.FullName.Replace(fi.Extension, string.Empty);
168
else
169
foldername = OutputFolder + fi.Name;
170
171
//首先为该文件创建一个解压缩到的目录
172
Directory.CreateDirectory(foldername);
173
174
ZipEntry ze = null;
175
while ((ze = stream.GetNextEntry()) != null)
176
{
177
int size = 2048;
178
byte[] data = new byte[2048];
179
180
181
string[] s = ze.Name.Split('\\');
182
if (s.Length > 1)
183
{
184
StringBuilder sb = new StringBuilder(foldername);
185
186
int i = 0;
187
while (i < s.Length - 1)
188
{
189
sb.Append('\\');
190
sb.Append(s[i++]);
191
}
192
193
Directory.CreateDirectory(sb.ToString());
194
}
195
196
string outfile = foldername +"\\" + ze.Name;
197
198
using (FileStream fs = new FileStream(outfile, FileMode.Create))
199
{
200
201
while (true)
202
{
203
size = stream.Read(data, 0, data.Length);
204
205
if (size > 0)
206
{
207
fs.Write(data, 0, size);
208
}
209
else
210
{
211
break;
212
}
213
}
214
215
fs.Flush();
216
fs.Close();
217
}
218
}
219
}
220
}
221
222
}
223
}
224
225
using System;2
using System.Collections.Generic;3
using System.Text;4
using System.IO;5

6
using ICSharpCode.SharpZipLib.Zip;7

8
namespace Zipper9
{10
public class Zipper11
{12
private string m_FolderPath = null;13

14
/// <summary>15
/// 压缩文件夹16
/// </summary>17
/// <param name="FolderPath"></param>18
/// <param name="outstream"></param>19
protected void ZipFolderUtility(string FolderPath, ZipOutputStream outstream)20
{21
DirectoryInfo rootfolder = new DirectoryInfo(FolderPath);22
//压缩当前文件夹下的文件23
foreach (FileInfo f in rootfolder.GetFiles())24
ZipFileUtility(f.FullName, outstream);25
//压缩子文件夹26
foreach (DirectoryInfo childfolder in rootfolder.GetDirectories())27
ZipFolderUtility(childfolder.FullName, outstream);28

29
}30

31
/// <summary>32
/// 压缩文件33
/// </summary>34
/// <param name="InFilePath"></param>35
/// <param name="outstream"></param>36
protected void ZipFileUtility(string InFilePath, ZipOutputStream outstream)37
{38
FileInfo fi = new FileInfo(InFilePath);39
40
FileStream fs = fi.OpenRead();41
//42
ZipEntry entry = null;43
44
if (fi.DirectoryName == m_FolderPath)45
entry = new ZipEntry(fi.Name);46
else47
entry = new ZipEntry(fi.DirectoryName.Replace(m_FolderPath+"\\",string.Empty) + "\\" + fi.Name);48

49
entry.Size = fs.Length;50
entry.DateTime = DateTime.Now;51
//52
outstream.PutNextEntry(entry);53
//54
int index = 0;55
int count = 1048576;56

57
byte[] buffer = new byte[count];58
//59
while ((count = fs.Read(buffer, 0, count)) != 0)60
{61
outstream.Write(buffer, 0, count);62
index += count;63

64
if (count != 1048576)65
{66
break;67
}68
}69

70
fs.Close();71
}72

73
/// <summary>74
/// 压缩文件夹75
/// </summary>76
/// <param name="FolderPath">文件夹路径</param>77
/// <param name="ZipOutputFileName">压缩文件路径</param>78
public void ZipFolder(string FolderPath, string ZipOutputFileName)79
{80
try81
{82
if (!Directory.Exists(FolderPath))83
throw new System.IO.DirectoryNotFoundException("Folder:" + FolderPath + " Not Fount.");84

85
if (string.IsNullOrEmpty(ZipOutputFileName))86
ZipOutputFileName = FolderPath + ".zip";87

88
Stream stm = new FileStream(ZipOutputFileName, FileMode.Create);89

90
try91
{92
m_FolderPath = FolderPath;93

94
ZipOutputStream zipout = new ZipOutputStream(stm);95

96
ZipFolderUtility(FolderPath, zipout);97

98
zipout.CloseEntry();99
zipout.Close();100
zipout.Finish();101
} 102
finally103
{104
stm.Close();105
}106
}107
catch (Exception ex)108
{109
System.Diagnostics.Trace.WriteLine(ex.Message);110
}111
}112

113
/// <summary>114
/// 压缩文件115
/// </summary>116
/// <param name="FilePath">文件路径</param>117
/// <param name="ZipOutputFilePath">压缩文件路径</param>118
public void ZipFile(string FilePath, string ZipOutputFilePath)119
{120
try121
{122
if (!File.Exists(FilePath))123
throw new System.IO.FileNotFoundException("File:" + FilePath + " Not Found.");124

125
if (string.IsNullOrEmpty(ZipOutputFilePath))126
ZipOutputFilePath = ZipOutputFilePath.Replace(127
System.IO.Path.GetExtension(ZipOutputFilePath), ".zip");128
129
Stream stm = new FileStream(ZipOutputFilePath, FileMode.Create);130

131
try132
{133
ZipOutputStream zipout = new ZipOutputStream(stm);134

135
ZipFileUtility(FilePath, zipout);136

137
zipout.CloseEntry();138
zipout.Close();139
zipout.Finish();140
}141
finally142
{143
stm.Close();144
} 145
}146
catch (Exception ex)147
{148
System.Diagnostics.Trace.WriteLine(ex.Message);149
}150
}151

152
/// <summary>153
/// 解压缩154
/// </summary>155
/// <param name="FilePath"></param>156
public void UnZip(string FilePath,string OutputFolder)157
{158
if (!File.Exists(FilePath))159
throw new FileNotFoundException("File:" + FilePath + " Not Found.");160

161
FileInfo fi = new FileInfo(FilePath);162
using (ZipInputStream stream = new ZipInputStream(fi.OpenRead()))163
{164
string foldername = null;165

166
if (string.IsNullOrEmpty(OutputFolder))167
foldername = fi.FullName.Replace(fi.Extension, string.Empty);168
else169
foldername = OutputFolder + fi.Name;170

171
//首先为该文件创建一个解压缩到的目录172
Directory.CreateDirectory(foldername);173

174
ZipEntry ze = null;175
while ((ze = stream.GetNextEntry()) != null)176
{177
int size = 2048;178
byte[] data = new byte[2048];179

180

181
string[] s = ze.Name.Split('\\');182
if (s.Length > 1)183
{184
StringBuilder sb = new StringBuilder(foldername);185

186
int i = 0;187
while (i < s.Length - 1)188
{189
sb.Append('\\');190
sb.Append(s[i++]);191
}192
193
Directory.CreateDirectory(sb.ToString());194
}195

196
string outfile = foldername +"\\" + ze.Name;197

198
using (FileStream fs = new FileStream(outfile, FileMode.Create))199
{200

201
while (true)202
{203
size = stream.Read(data, 0, data.Length);204

205
if (size > 0)206
{207
fs.Write(data, 0, size);208
}209
else210
{211
break;212
}213
}214

215
fs.Flush();216
fs.Close();217
}218
}219
}220
}221

222
}223
}224

225



浙公网安备 33010602011771号