压缩包制作也是很多项目中需要用到的功能。比如有大量的文件(假设有10000个)需要上传,1个1个的上传似乎不太靠谱(靠,那得传到什么时候啊?),这时我们可以制作一个压缩包zip,直接传这个文件到服务器端,然后在服务器目录解压,释放里面的文件。
这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求。
ICSharpCode.SharpZipLib提供了两个压缩算法的实现,分别是BZIP2(压缩时间长,压缩率高)和GZIP(压缩效率高,压缩率低)。
先定义一个枚举,用于程序标示是哪个压缩算法。
01 | /// <summary> |
02 |
/// 压缩枚举 |
03 |
/// </summary> |
04 |
public enum ZipEnum |
05 |
{ |
06 |
//压缩时间长,压缩率高 |
07 |
BZIP2, |
08 |
09 |
//压缩效率高,压缩率低 |
10 |
GZIP |
11 |
} |
单个文件的压缩:
01 | #region 制作压缩包(单个文件压缩) |
02 |
/// <summary> |
03 |
/// 制作压缩包(单个文件压缩) |
04 |
/// </summary> |
05 |
/// <param name="sourceFileName">原文件</param> |
06 |
/// <param name="zipFileName">压缩文件</param> |
07 |
/// <param name="zipEnum">压缩算法枚举</param> |
08 |
/// <returns>压缩成功标志</returns> |
09 |
public static bool ZipFile( string srcFileName, string zipFileName, ZipEnum zipEnum) |
10 |
{ |
11 |
bool flag = true ; |
12 |
try |
13 |
{ |
14 |
switch (zipEnum) |
15 |
{ |
16 |
case ZipEnum.BZIP2: |
17 |
18 |
FileStream inStream = File.OpenRead(srcFileName); |
19 |
FileStream outStream = File.Open(zipFileName, FileMode.Create); |
20 |
21 |
//参数true表示压缩完成后,inStream和outStream连接都释放 |
22 |
BZip2.ComPRess(inStream, outStream, true , 4096); |
23 |
24 |
inStream.Close(); |
25 |
outStream.Close(); |
26 |
27 |
28 |
break ; |
29 |
case ZipEnum.GZIP: |
30 |
31 |
FileStream srcFile = File.OpenRead(srcFileName); |
32 |
33 |
GZipOutputStream zipFile = new 学习交流
热门图片
猜你喜欢的新闻
新闻热点 2019-10-23 09:17:05
2019-10-21 09:20:02
2019-10-21 09:00:12
2019-09-26 08:57:12
2019-09-25 08:46:36
2019-09-25 08:15:43
疑难解答 |