白开心
IT博客
::
首页
:: ::
联系
::
聚合
::
管理
::
9 随笔 :: 76 文章 :: 28 评论 :: 0 Trackbacks
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
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
1
2
3
4
公告
独坐在路边街角,冷风吹醒,默默地伴着我的孤影。
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(12)
给我留言
查看公开留言
查看私人留言
文章分类
.Net(学习ing...)(39)
(rss)
Asp+vbScript(14)
(rss)
JavaScript(14)
(rss)
T-SQL(8)
(rss)
经典收藏(8)
(rss)
设计模式
(rss)
文章档案
2013年4月 (1)
2013年3月 (1)
2012年7月 (1)
2012年4月 (1)
2011年10月 (1)
2011年8月 (1)
2011年3月 (1)
2011年2月 (1)
2011年1月 (1)
2010年9月 (1)
2010年6月 (1)
2010年4月 (2)
2010年1月 (1)
2009年11月 (1)
2009年10月 (6)
2009年9月 (3)
2009年8月 (2)
2009年5月 (1)
2008年10月 (2)
2008年9月 (2)
2008年7月 (2)
2008年6月 (1)
2008年3月 (1)
2008年2月 (1)
2008年1月 (1)
2007年12月 (5)
2007年11月 (4)
2007年10月 (2)
2007年9月 (2)
2007年7月 (1)
2007年6月 (2)
2007年4月 (2)
2007年1月 (1)
2006年12月 (1)
2006年11月 (2)
2006年8月 (1)
2006年7月 (1)
2006年5月 (2)
2006年4月 (1)
2006年2月 (1)
2006年1月 (1)
2005年12月 (10)
相册
PhotoShop Study For HuangHuaXiang
我的相册
收藏夹
.NET(1)
(rss)
其他类别
(rss)
搜索
最新评论
1. re: JQUERY的表单异步提交[未登录]
1111111
--111
2. re: JQUERY的表单异步提交
eqedqedasd
--123
3. re: 委托和匿名函数
评论内容较长,点击标题查看
--bracelet shopping
4. re: 递归查询
您好!你的在我这里怎么执行不了啊!
--小陈
5. re: JS操作Xml的相关方法[未登录]
不能保丰到服务器上?
--11
阅读排行榜
1. 窦房折返性心动过速(928)
2. ∷∷∷∷男人感悟一百条∷∷∷∷(710)
3. 人生致命的八个经典问题(657)
4. 秋天不回来(570)
5. 圣诞(467)
评论排行榜
1. 圣诞(0)
2. 人生致命的八个经典问题(0)
3. ∷∷∷∷男人感悟一百条∷∷∷∷(0)
4. 窦房折返性心动过速(0)
5. 秋天不回来(0)
C#解压缩类
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
System.IO;
5
using
ICSharpCode.SharpZipLib;
6
using
ICSharpCode.SharpZipLib.Zip;
7
using
ICSharpCode.SharpZipLib.Checksums;
8
9
/**/
/*
10
* 解压缩
11
* 该程序压缩和解压配合才能使用
12
* 普通用 Winrar 压缩的文件该解压不能通过
13
* Modify By HJ 2007-10-25
14
*/
15
namespace
ZipApplication
16
{
17
/**/
///
<summary>
18
///
压缩类
19
///
</summary>
20
public
class
ZipClass
21
{
22
/**/
///
<summary>
23
///
递归压缩文件夹方法
24
///
</summary>
25
///
<param name="FolderToZip"></param>
26
///
<param name="s"></param>
27
///
<param name="ParentFolderName"></param>
28
private
static
bool
ZipFileDictory(
string
FolderToZip, ZipOutputStream s,
string
ParentFolderName)
29
{
30
bool
res
=
true
;
31
string
[] folders, filenames;
32
ZipEntry entry
=
null
;
33
FileStream fs
=
null
;
34
Crc32 crc
=
new
Crc32();
35
36
try
37
{
38
39
//
创建当前文件夹
40
entry
=
new
ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip)
+
"
/
"
));
//
加上 “/” 才会当成是文件夹创建
41
s.PutNextEntry(entry);
42
s.Flush();
43
44
45
//
先压缩文件,再递归压缩文件夹
46
filenames
=
Directory.GetFiles(FolderToZip);
47
foreach
(
string
file
in
filenames)
48
{
49
//
打开压缩文件
50
fs
=
File.OpenRead(file);
51
52
byte
[] buffer
=
new
byte
[fs.Length];
53
fs.Read(buffer,
0
, buffer.Length);
54
entry
=
new
ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip)
+
"
/
"
+
Path.GetFileName(file)));
55
56
entry.DateTime
=
DateTime.Now;
57
entry.Size
=
fs.Length;
58
fs.Close();
59
60
crc.Reset();
61
crc.Update(buffer);
62
63
entry.Crc
=
crc.Value;
64
65
s.PutNextEntry(entry);
66
67
s.Write(buffer,
0
, buffer.Length);
68
}
69
}
70
catch
71
{
72
res
=
false
;
73
}
74
finally
75
{
76
if
(fs
!=
null
)
77
{
78
fs.Close();
79
fs
=
null
;
80
}
81
if
(entry
!=
null
)
82
{
83
entry
=
null
;
84
}
85
GC.Collect();
86
GC.Collect(
1
);
87
}
88
89
90
folders
=
Directory.GetDirectories(FolderToZip);
91
foreach
(
string
folder
in
folders)
92
{
93
if
(
!
ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))
94
{
95
return
false
;
96
}
97
}
98
99
return
res;
100
}
101
102
/**/
///
<summary>
103
///
压缩目录
104
///
</summary>
105
///
<param name="FolderToZip">
待压缩的文件夹,全路径格式
</param>
106
///
<param name="ZipedFile">
压缩后的文件名,全路径格式
</param>
107
///
<returns></returns>
108
private
static
bool
ZipFileDictory(
string
FolderToZip,
string
ZipedFile, String Password)
109
{
110
bool
res;
111
if
(
!
Directory.Exists(FolderToZip))
112
{
113
return
false
;
114
}
115
116
ZipOutputStream s
=
new
ZipOutputStream(File.Create(ZipedFile));
117
s.SetLevel(
6
);
118
s.Password
=
Password;
119
120
res
=
ZipFileDictory(FolderToZip, s,
""
);
121
122
s.Finish();
123
s.Close();
124
125
return
res;
126
}
127
128
/**/
///
<summary>
129
///
压缩文件
130
///
</summary>
131
///
<param name="FileToZip">
要进行压缩的文件名
</param>
132
///
<param name="ZipedFile">
压缩后生成的压缩文件名
</param>
133
///
<returns></returns>
134
private
static
bool
ZipFile(
string
FileToZip,
string
ZipedFile, String Password)
135
{
136
//
如果文件没有找到,则报错
137
if
(
!
File.Exists(FileToZip))
138
{
139
throw
new
System.IO.FileNotFoundException(
"
指定要压缩的文件:
"
+
FileToZip
+
"
不存在!
"
);
140
}
141
//
FileStream fs = null;
142
FileStream ZipFile
=
null
;
143
ZipOutputStream ZipStream
=
null
;
144
ZipEntry ZipEntry
=
null
;
145
146
bool
res
=
true
;
147
try
148
{
149
ZipFile
=
File.OpenRead(FileToZip);
150
byte
[] buffer
=
new
byte
[ZipFile.Length];
151
ZipFile.Read(buffer,
0
, buffer.Length);
152
ZipFile.Close();
153
154
ZipFile
=
File.Create(ZipedFile);
155
ZipStream
=
new
ZipOutputStream(ZipFile);
156
ZipStream.Password
=
Password;
157
ZipEntry
=
new
ZipEntry(Path.GetFileName(FileToZip));
158
ZipStream.PutNextEntry(ZipEntry);
159
ZipStream.SetLevel(
6
);
160
161
ZipStream.Write(buffer,
0
, buffer.Length);
162
}
163
catch
164
{
165
res
=
false
;
166
}
167
finally
168
{
169
if
(ZipEntry
!=
null
)
170
{
171
ZipEntry
=
null
;
172
}
173
if
(ZipStream
!=
null
)
174
{
175
ZipStream.Finish();
176
ZipStream.Close();
177
}
178
if
(ZipFile
!=
null
)
179
{
180
ZipFile.Close();
181
ZipFile
=
null
;
182
}
183
GC.Collect();
184
GC.Collect(
1
);
185
}
186
187
return
res;
188
}
189
190
/**/
///
<summary>
191
///
压缩文件 和 文件夹
192
///
</summary>
193
///
<param name="FileToZip">
待压缩的文件或文件夹,全路径格式
</param>
194
///
<param name="ZipedFile">
压缩后生成的压缩文件名,全路径格式
</param>
195
///
<returns></returns>
196
public
static
bool
Zip(String FileToZip, String ZipedFile, String Password)
197
{
198
if
(Directory.Exists(FileToZip))
199
{
200
return
ZipFileDictory(FileToZip, ZipedFile, Password);
201
}
202
else
if
(File.Exists(FileToZip))
203
{
204
return
ZipFile(FileToZip, ZipedFile, Password);
205
}
206
else
207
{
208
return
false
;
209
}
210
}
211
}
212
/**/
///
<summary>
///
解压类
///
</summary>
public
class
UnZipClass
{
/**/
///
<summary>
///
解压功能(解压压缩文件到指定目录)
///
</summary>
///
<param name="FileToUpZip">
待解压的文件
</param>
///
<param name="ZipedFolder">
指定解压目标目录
</param>
public
static
void
UnZip(
string
FileToUpZip,
string
ZipedFolder,
string
Password)
{
if
(
!
File.Exists(FileToUpZip))
{
return
;
}
if
(
!
Directory.Exists(ZipedFolder))
{
Directory.CreateDirectory(ZipedFolder);
}
ZipInputStream s
=
null
;
ZipEntry theEntry
=
null
;
string
fileName;
FileStream streamWriter
=
null
;
try
{
s
=
new
ZipInputStream(File.OpenRead(FileToUpZip));
s.Password
=
Password;
while
((theEntry
=
s.GetNextEntry())
!=
null
)
{
if
(theEntry.Name
!=
String.Empty)
{
fileName
=
Path.Combine(ZipedFolder, theEntry.Name);
/**/
///
判断文件路径是否是文件夹
if
(fileName.EndsWith(
"
/
"
)
||
fileName.EndsWith(
"
\\
"
))
{
Directory.CreateDirectory(fileName);
continue
;
}
streamWriter
=
File.Create(fileName);
int
size
=
2048
;
byte
[] data
=
new
byte
[
2048
];
while
(
true
)
{
size
=
s.Read(data,
0
, data.Length);
if
(size
>
0
)
{
streamWriter.Write(data,
0
, size);
}
else
{
break
;
}
}
}
}
}
finally
{
if
(streamWriter
!=
null
)
{
streamWriter.Close();
streamWriter
=
null
;
}
if
(theEntry
!=
null
)
{
theEntry
=
null
;
}
if
(s
!=
null
)
{
s.Close();
s
=
null
;
}
GC.Collect();
GC.Collect(
1
);
}
}
}
}
posted on 2007-09-22 17:43
白开心
阅读(6541)
评论(0)
编辑
收藏
引用
所属分类:
.Net(学习ing...)
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © 白开心