C# ICSharpCode.SharpZipLib
C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用
工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个通用的类,这样在工作中可以快速的完成压缩和解压缩的动作哦
官网下载地址: http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用;
2. 在需要使用到ICSharpCode.SharpZipLib中定义的类的编码界面中将其导入(Imports)

1 using ICSharpCode.SharpZipLib.Zip;
2 using System;
3 using System.IO;
4
5 namespace ZTO.WayBill.Utilities
6 {
7 /// <summary>
8 /// 压缩类
9 /// http://www.cnblogs.com/kissdodog/p/3525295.html
10
11 /// </summary>
12 public class ZipHelper
13 {
14 /// <summary>
15 /// 压缩文件夹
16 /// </summary>
17 /// <param name="source">源目录</param>
18 /// <param name="s">ZipOutputStream对象</param>
19 public static void Compress(string source, ZipOutputStream s)
20 {
21 string[] filenames = Directory.GetFileSystemEntries(source);
22 foreach (string file in filenames)
23 {
24 if (Directory.Exists(file))
25 {
26 // 递归压缩子文件夹
27 Compress(file, s);
28 }
29 else
30 {
31 using (FileStream fs = File.OpenRead(file))
32 {
33 byte[] buffer = new byte[4 * 1024];
34 // 此处去掉盘符,如D:\123\1.txt 去掉D:
35 ZipEntry entry = new ZipEntry(file.Replace(Path.GetPathRoot(file), ""));
36 entry.DateTime = DateTime.Now;
37 s.PutNextEntry(entry);
38 int sourceBytes;
39 do
40 {
41 sourceBytes = fs.Read(buffer, 0, buffer.Length);
42 s.Write(buffer, 0, sourceBytes);
43 } while (sourceBytes > 0);
44 }
45 }
46 }
47 }
48
49 /// <summary>
50 /// 解压缩
51 /// </summary>
52 /// <param name="sourceFile">压缩包完整路径地址</param>
53 /// <param name="targetPath">解压路径是哪里</param>
54 /// <returns></returns>
55 public static bool Decompress(string sourceFile, string targetPath)
56 {
57 if (!File.Exists(sourceFile))
58 {
59 throw new FileNotFoundException(string.Format("未能找到文件 '{0}' ", sourceFile));
60 }
61 if (!Directory.Exists(targetPath))
62 {
63 Directory.CreateDirectory(targetPath);
64 }
65 using (var s = new ZipInputStream(File.OpenRead(sourceFile)))
66 {
67 ZipEntry theEntry;
68 while ((theEntry = s.GetNextEntry()) != null)
69 {
70 if (theEntry.IsDirectory)
71 {
72 continue;
73 }
74 string directorName = Path.Combine(targetPath, Path.GetDirectoryName(theEntry.Name));
75 string fileName = Path.Combine(directorName, Path.GetFileName(theEntry.Name));
76 if (!Directory.Exists(directorName))
77 {
78 Directory.CreateDirectory(directorName);
79 }
80 if (!String.IsNullOrEmpty(fileName))
81 {
82 using (FileStream streamWriter = File.Create(fileName))
83 {
84 int size = 4096;
85 byte[] data = new byte[size];
86 while (size > 0)
87 {
88 streamWriter.Write(data, 0, size);
89 size = s.Read(data, 0, data.Length);
90 }
91 }
92 }
93 }
94 }
95 return true;
96 }
97 }
98 }

C# ICSharpCode.SharpZipLib的更多相关文章
- ICSharpCode.SharpZipLib 压缩、解压文件 附源码
http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, ...
- 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature
写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...
- ICSharpCode.SharpZipLib.dll 移植WP
由于众所周知的原因. ICSharpCode.SharpZipLib.dll在Unity移植WP的时候出现诸多API不兼容,解决方案是在在Github上面找ICSharpCode.SharpZipLi ...
- C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)
我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...
- C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩
这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http://icsharpcode.github.io/SharpZipLib/ 1.单个或多个文件加 ...
- C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类
最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ...
- ICSharpCode.SharpZipLib
ICSharpCode.SharpZipLib 压缩.解压文件 附源码 http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZipli ...
- 未能加载文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=n
这个可能是因为,缺少文件ICSharpCode.SharpZipLib.dll文件. 我从网上下载了个dll文件,放到根目录中自己好了.
- npoi与memcached中的ICSharpCode.SharpZipLib版本冲突的解决方案
项目中一直使用NPOI与memcached,一直相安无事,但是最近升级了npoi到最新版本,发生了ICSharpCode.SharpZipLib的版本冲突问题. 因为此前一直使用的是NPOI的1.x的 ...
- C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll
using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; using System; using Syst ...
随机推荐
- 我已提取并尝试使用启动脚本(./start navicat)来启动 Navicat Linux 版本号,但没有反应
具体的安装教程,參考这个navicat_for_mysql_10.0.11在linux下的安装,介绍的非常具体 參考这个 :我可否在 64-bit Linux 执行 Navicat? 推荐navica ...
- thinkphp达到UploadFile.class.php图片上传功能
片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...
- Ubuntu Linux中开启MySQL远程访问功能
为了给服务器一个真实的运行环境,今天在内网中部署了一台Ubuntu Linux服务器,其中最头疼的就是MySQL的安装,apt下载更新的速度太慢了,于是就自行编译了一下MySQL的源码,具体的编译方法 ...
- poj 4088:Set操作
poj 4088:集合运算 题目:(至于4089.那个问题做过.使用归并思想,所以没有写) 描写叙述 小张须要从一批数量庞大的正整数中挑选出第k小的数.由于数据量太庞大,挑选起来非常费劲,希望你能编程 ...
- IP多播(组播)
IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希 ...
- 网络视频播放器插件ckplayer使用-简介
ckplayer插件下载:http://pan.baidu.com/s/12HYH4(假设不见了,下载您自己的地址,下载后添加到站点根文件夹) ******特别提醒:解压后不要忘了把js文件夹也加入到 ...
- Android学习路径(七)建立Action Bar
在action bar最今本的形式中,它只在左边展示了activity的标题以及应用的icon. 即使在这样的简单的形式中,它也不过告诉用户如今在应用的哪个activity中,同一时候为你的应用保持一 ...
- Top与ROW_NUMBER
论Top与ROW_NUMBER读取第一页的效率问题 前一段时间研究关于分页的问题,由于数据库属于百万级的,考虑了关于优化方面的问题.其中一个考虑是:第一页展现的频率肯定是最高的,所以我想第一页就使 ...
- oracle在SQLPLUS 和PLSQL建 job 的区别
oracle在SQLPLUS 和PLSQL建 job 的区别 //建立job variable test_job_really number; begin dbms_job.submit(:test_ ...
- STL源代码分析 集装箱 stl_set.h
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie set ------------------------------------------ ...