在项目中往往使用解压缩公共类,解压缩之后的文件占用空间小,也可进行加密,往往可以用于客户端上传附件,打包输出主程序等,其中的好处就不多说了,最近着手的项目中多次使用到了解压缩方法,现较流行的就是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快速解压缩帮助类》——即粘即用的更多相关文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2 新增解压缩工具类ZipHelper

    在项目对文件进行解压缩是非常常用的功能,对文件进行压缩存储或传输可以节省流量与空间.压缩文件的格式与方法都比较多,比较常用的国际标准是zip格式.压缩与解压缩的方法也很多,在.NET 2.0开始,在S ...

  2. PclZip:强大的PHP压缩与解压缩zip类

    PclZip简介PclZip是一个很强大的压缩与解压缩zip文件的PHP类,PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip.PKZIP):且能对此类类档案进行处理,包括产 ...

  3. GZIP压缩、解压缩工具类

    GZIP压缩.解压缩工具类: public class GZIPUtiles { public static String compress(String str) throws IOExceptio ...

  4. ZIP解压缩工具类

    import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expan ...

  5. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  6. mybatis-generator-core快速生成实体类和Mapper

    日常使用Mybatis少不了和实体类和 Mapper 打交道.除了我们手写来实现,还可以使用 mybatis-generator-core 来快速生成 实体类和 Mapper. 步骤如下: 1.下载 ...

  7. eclipse快速定位当前类所在位置

    如何快速的找到一个类并且定位它所在的位置呢?这里以搜索Menu类为例说明. 可以通过CTRL + SHIFT +R的组合键,输入Menu 双击Menu.java即可跳转到对应的类上,但此时还不知道此类 ...

  8. es6 快速入门 系列 —— 类 (class)

    其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...

  9. [压缩解压缩] SharpZip--压缩、解压缩帮助类

    里面有三个类都是用于压缩和解压缩的.大家看下图片 看下面代码吧 /// <summary> /// 类说明:SharpZip /// 编 码 人:苏飞 /// 联系方式:361983679 ...

随机推荐

  1. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  2. ExtJS中动态设置TextField的readOnly属性

    第一种方式: textField, 如果知道textField的id = 'textField' 话,就可以利用如下的方法: 则代码如下:Ext.getCmp("textField" ...

  3. Tomcat 架构 (一)

    在实践过程中,从WebSphere中实现一个EJB的容器以及从WebLogic中实现一个JMS几乎都是不可能的,然而来自Apache基金会的servlet容器Tomcat至少在理论上是可能做到的. 请 ...

  4. LINUX TOP,不是这样玩地!!!

    老同志遇到新问题了. TOP显示完全不是我要的,CPU,内存都是0.每个CPU还分别显示. 网上搜下,原来是A(显示风格)R(反向排序)P,M(CPU,内存排序)之类引起的. 记下了.

  5. 【POJ2778】AC自动机+矩阵乘法

    DNA Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14758 Accepted: 5716 Descrip ...

  6. ckeditor与ckfinder简单整合使用

    Ckeditor与ckfinder简单整合使用 功能:主要用来发送图文的email,图片上传到本地服务器,但是email的图片地址要写上该服务器的远程地址(图片地址:例如:http://www.bai ...

  7. 10.在Global全局文件中的Application_BeginRequest示例

    只要有人访问本网站,都要执行全局文件的Application_BeginRequest事件.因此我们可以防盗链. 示例要求:凡不是网站本机登录的都给客户端提示,用图片显示. 分析:由于网页在加载时不是 ...

  8. YII model模型和登陆详解

    模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. 数据对象的每个字段对应模型中的一个属性.每个属性 ...

  9. 2.5.3 使用alertDialog创建自定义对话框

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  10. bzoj3504

    这是一道最大流的题目首先要引起注意的是,这类多个起点多个终点的问题一定要同时跑,不能分开来跑由于是无向图,也就相当于从起点跑2*n次好,不难想到s向两个起点连边,两终点想t连边,流量为2*an或2*b ...