《ICSharpCode快速解压缩帮助类》——即粘即用
在项目中往往使用解压缩公共类,解压缩之后的文件占用空间小,也可进行加密,往往可以用于客户端上传附件,打包输出主程序等,其中的好处就不多说了,最近着手的项目中多次使用到了解压缩方法,现较流行的就是ICSharpCode,稳定,高效,是一个不错的解压缩封装类。通过InterNET和个人的整理,现将该类分享出来,作为资源分享给大家,这样就可以不用在埋头苦脑的在InterNET上苦苦寻找了,废话不多说,上代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip; namespace Helper
{
public class Utily
{
/// <summary>
/// 快速压缩
/// </summary>
/// <param name="filesPath">需要压缩的文件夹路径</param>
/// <param name="zipFilePath">输出路径</param>
/// <param name="pwd">密码,可不写</param>
/// <param name="fileFilter">过滤条件</param>
/// <param name="CreateEmptyDirectories">是否压缩空文件夹</param>
/// <param name="progressFun">处理进程</param>
/// <param name="seconds">触发的秒数</param>
/// <param name="completeFun">完成事件</param>
public static void CreateZipFile(string filesPath, string zipFilePath, string pwd, string fileFilter, bool CreateEmptyDirectories, ProgressHandler progressFun, double seconds, CompletedFileHandler completeFun)
{
FastZipEvents events = new FastZipEvents();
if (progressFun != null)
{
events.Progress = progressFun;
events.ProgressInterval = TimeSpan.FromSeconds(seconds);
}
if (completeFun != null)
{
events.CompletedFile = completeFun;
}
FastZip zip = new FastZip(events);
zip.CreateEmptyDirectories = CreateEmptyDirectories;
if (!string.IsNullOrEmpty(pwd))
zip.Password = pwd;
zip.UseZip64 = UseZip64.On;
zip.RestoreAttributesOnExtract = true;
zip.RestoreDateTimeOnExtract = true;
zip.CreateZip(zipFilePath, filesPath, true, fileFilter);
} /// <summary>
/// 快速解压
/// </summary>
/// <param name="zipFilePath">压缩文件路径</param>
/// <param name="extractPath">解压路径</param>
/// <param name="pwd">压缩密码</param>
/// <param name="progressFun">进程</param>
/// <param name="seconds">触发时间</param>
public static void ExtractZipFile(string zipFilePath, string extractPath, string pwd, ProgressHandler progressFun, double seconds)
{
FastZipEvents events = new FastZipEvents();
if (progressFun != null)
{
events.Progress = progressFun;
events.ProgressInterval = TimeSpan.FromSeconds(seconds);
}
FastZip zip = new FastZip(events); zip.CreateEmptyDirectories = true;
if (!string.IsNullOrEmpty(pwd))
zip.Password = pwd;
zip.UseZip64 = UseZip64.On;
zip.RestoreAttributesOnExtract = true;
zip.RestoreDateTimeOnExtract = true;
zip.ExtractZip(zipFilePath, extractPath, FastZip.Overwrite.Always, null, "", "", true);
} /// <summary>
/// 快速解压
/// </summary>
/// <param name="zipFilePath">压缩文件路径</param>
/// <param name="extractPath">解压路径</param>
/// <param name="pwd">密码</param>
/// <param name="progressFun">进程</param>
/// <param name="seconds">触发时间</param>
/// <param name="completeFun">压缩过程中执行的函数</param>
public static void ExtractZipFile(string zipFilePath, string extractPath, string pwd, ProgressHandler progressFun, double seconds, CompletedFileHandler completeFun)
{
FastZipEvents events = new FastZipEvents();
if (progressFun != null)
{
events.Progress = progressFun;
events.ProgressInterval = TimeSpan.FromSeconds(seconds);
}
if (completeFun != null)
{
events.CompletedFile = completeFun;
}
FastZip zip = new FastZip(events); zip.CreateEmptyDirectories = true;
if (!string.IsNullOrEmpty(pwd))
zip.Password = pwd;
zip.UseZip64 = UseZip64.On;
zip.RestoreAttributesOnExtract = true;
zip.RestoreDateTimeOnExtract = true;
zip.ExtractZip(zipFilePath, extractPath, FastZip.Overwrite.Always, null, "", "", true);
} /// <summary>
/// 获得压缩包内原文件总大小
/// </summary>
/// <param name="fileName"></param>
/// <param name="fileFilter"></param>
/// <param name="directoryFilter"></param>
/// <returns></returns>
public static long GetZipFileSize(string fileName, string fileFilter, string directoryFilter)
{
long b = ;
using (ZipFile zipFile = new ZipFile(fileName))
{
PathFilter localFileFilter = new PathFilter(fileFilter);
PathFilter localDirFilter = new PathFilter(directoryFilter); if (zipFile.Count == )
{
return ;
}
for (int i = ; i < zipFile.Count; ++i)
{
ZipEntry e = zipFile[i];
if (e.IsFile)
{
string path = Path.GetDirectoryName(e.Name);
if (localDirFilter.IsMatch(path))
{
if (localFileFilter.IsMatch(Path.GetFileName(e.Name)))
{
b += e.Size;
}
}
}
}
}
return b;
} /// <summary>
/// 获得MD5校验码
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public static string GetMD5(string filepath)
{
string returnStr = "";
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] md5byte = md5.ComputeHash(fs);
int i, j;
foreach (byte b in md5byte)
{
i = Convert.ToInt32(b);
j = i >> ;
returnStr += Convert.ToString(j, );
j = ((i << ) & 0x00ff) >> ;
returnStr += Convert.ToString(j, );
}
fs.Dispose();
return returnStr;
} /// <summary>
/// 解压缩特定文件名的文件
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="addres">解压缩路径</param>
/// <param name="zipFileName">文件名称</param>
/// <param name="pwd">解压缩包密码</param>
public static void ZipToFile(string path, string addres, string zipFileName, string pwd)
{
ZipInputStream ZipStream = new ZipInputStream(System.IO.File.OpenRead(path));
if (!string.IsNullOrEmpty(pwd))
ZipStream.Password = pwd;
ZipEntry fileEntry;
while ((fileEntry = ZipStream.GetNextEntry()) != null)
{
string filename = Path.GetFileName(fileEntry.Name);
if (filename == zipFileName)
{
filename = addres + "\\" + filename;
FileStream streamWriter = System.IO.File.Create(filename);
int size = (int)fileEntry.Size;
byte[] buffer = new byte[size]; size = ZipStream.Read(buffer, , size);
streamWriter.Write(buffer, , size);
streamWriter.Close();
}
}
ZipStream.Close();
}
}
}
该类能够满足基本常用解压缩的方法了,不过现比较流行的应该是7z压缩,这个也在研究中,以上代码若有不正确的地方,也请各位大牛指正。至于ICSharpCode的DLL文件,网上能够下载的地方也很多,我也就不在给出下载地址了。
温馨提醒:在引用ICSharpCode时记的在调用此类方法的类库或应用程序上也要引用ICSharpCode,否则会产生错误。
今天就分享这么多吧。
版权声明:
本文由Tom原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明(否则保留追究责任的权利),且在文章页面明显位置给出原文链接,如有问题,可以通过419187544@qq.com 联系我,非常感谢。
《ICSharpCode快速解压缩帮助类》——即粘即用的更多相关文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2 新增解压缩工具类ZipHelper
在项目对文件进行解压缩是非常常用的功能,对文件进行压缩存储或传输可以节省流量与空间.压缩文件的格式与方法都比较多,比较常用的国际标准是zip格式.压缩与解压缩的方法也很多,在.NET 2.0开始,在S ...
- PclZip:强大的PHP压缩与解压缩zip类
PclZip简介PclZip是一个很强大的压缩与解压缩zip文件的PHP类,PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip.PKZIP):且能对此类类档案进行处理,包括产 ...
- GZIP压缩、解压缩工具类
GZIP压缩.解压缩工具类: public class GZIPUtiles { public static String compress(String str) throws IOExceptio ...
- ZIP解压缩工具类
import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expan ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- mybatis-generator-core快速生成实体类和Mapper
日常使用Mybatis少不了和实体类和 Mapper 打交道.除了我们手写来实现,还可以使用 mybatis-generator-core 来快速生成 实体类和 Mapper. 步骤如下: 1.下载 ...
- eclipse快速定位当前类所在位置
如何快速的找到一个类并且定位它所在的位置呢?这里以搜索Menu类为例说明. 可以通过CTRL + SHIFT +R的组合键,输入Menu 双击Menu.java即可跳转到对应的类上,但此时还不知道此类 ...
- es6 快速入门 系列 —— 类 (class)
其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...
- [压缩解压缩] SharpZip--压缩、解压缩帮助类
里面有三个类都是用于压缩和解压缩的.大家看下图片 看下面代码吧 /// <summary> /// 类说明:SharpZip /// 编 码 人:苏飞 /// 联系方式:361983679 ...
随机推荐
- 【转】使用spring @Scheduled注解执行定时任务
http://blog.csdn.net/sd4000784/article/details/7745947 以前框架使用quartz框架执行定时调度问题. 老大说这配置太麻烦.每个调度都需要多加在s ...
- linux下安装MySQL5.6记录
把之前装的mysql卸载了,准备重新用代码包装一遍,问了一下公司的DBA,他推荐给我mysql-5.6.16版本,说这个版本比较稳定. 按照网上的教程安装,结果就少文件,我还在找原因的时候,同事来找我 ...
- Linux下的echo服务器
epoll模式下的echo服务器,忘记从哪个网页上粘贴过来的了,学习一下 /* * main.cc * * Created on: 2009-11-30 * Author: liheyuan * De ...
- Web Adaptor重装配置时 提示已经配置成功的问题
环境 ArcGIS 10.1/10.2/10.3 Windwos 8.1 Tomcat 7.0.5 问题描述 较早之前在本机上安装配置过一个10.2.1版本的ArcGIS产品,包括桌面.Server和 ...
- Contest20140705 testA 二分
testA 输入文件: testA.in 输出文件testA.out 时限2000ms 问题描述: 有一个城市拥有N个节点,被M条有权无向路径连接.现在你要在一个地方(可以在路径上当然也可以在节点上) ...
- 【Java】Java里String 的equals和==
Java里面有对象和对象的引用的概念,在String方面,==比较的是引用,equals比较的是对象的具体值. String s1 = new String("abc");Stri ...
- Dining
poj3281:http://poj.org/problem?id=3281 题意:有n个人,然后有F份食物,D份饮料,然后每一个会有一些喜爱的饮料和食物,问你最多可以使得多少人同时得到一份自己喜爱的 ...
- Ubuntu 12安装Virtualbox
用aptitude或者apt-get安装Virtualbox,安装过程中会报:”No suitable module for running kernel found [fail]“,安装未成功. 在 ...
- RESTful风格的Web服务框架:Swagger
Swagger与SpringMVC项目整合 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的资料,感觉目前最流行的莫过于Swagger了,功能强大,UI界面漂亮,并且支持在线测试等等 ...
- Linux下让tomcat显示图片(jdk1.4, tomcat4.0 或更高版本)
1.步骤:修改$CATALINA_HOME/bin/catalina.sh文件($CATALINA_HOME是指tomcat安装目录),在原文件的40行新增如下内容即可CATALINA_OPTS=&q ...