《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 ...
随机推荐
- Python学习 - 简单抓取页面
最近想做一个小web应用,就是把豆瓣读书和亚马逊等写有书评的网站上关于某本书的打分记录下来,这样自己买书的时候当作参考. 这篇日志这是以豆瓣网为例,只讨论简单的功能. 向服务器发送查询请求 这很好处理 ...
- ie8如何支持html5
两种方法 : 一:Coding JavaScript <!--[if lt IE9]> <script> (function() { if (! /*@ ...
- Codeforces Round #205 (Div. 2) : D
思维题,感叹自己的智商不够啊. 思路大概是这样的: 1.排在队伍前面的女生是不用换位置的: 2.女生在队伍中的顺序是不会变的: 3.最后一个女生稳定了则程序结束: 4.每个女生都有个初始位置和最终位置 ...
- 提升网站用户体验—WebP 图片的高效使用
一.WebP 的由来 现代图像压缩技术对我们的生活方式影响很大.数码相机能将上千张高质量图片存储到一张内存卡里.智能手机可以与邻近设备快速分享高分辨率的图片.网站与手机等移动设备能快速展示各种富媒体. ...
- js中的变量提升
var v='Hello World'; (function(){ alert(v); var v='I love you'; })() 会出现alert出来的是undefined,原因是因为在函数域 ...
- 服务器RAID配置全程与RAID基础知识
服务器RAID配置全程 一.RAID介绍 RAID是Redundent Array of Inexpensive Disks的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”.后来RAID中的字 ...
- Go语言的学习
1.配置环境变量 2.本地阅读报的说明和文档 不用FQ window+R 出现黑窗口 执行 godoc -http :8080 在本地浏览器 localhost:8080 回车 3多行注释 ...
- C/S结构与B/S结构的特点分析
C/S结构与B/S结构的特点分析 为了区别于传统的C/S模式,才特意将其称为B/S模式.认识到这些结构的特征,对于系统的选型而言是很关键的. 1.系统的性能 在系统的性能方面,B/S占有优势的是其异地 ...
- HDOJ(HDU) 2519 新生晚会(组合公式)
Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? I ...
- vijosP1195“非常男女”计划
vijosP1195“非常男女”计划 链接:https://vijos.org/p/1195 [思路] 人数差. 人数差相等的两点之间的区间一定有男女人数相等. 计目前为止到i的1为sum1,0为su ...