博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ICSharpCode.SharpZipLib 开源压缩库使用示例
阅读量:6125 次
发布时间:2019-06-21

本文共 7702 字,大约阅读时间需要 25 分钟。

官方网站:

插件描述: ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip, Tar and BZip2 library,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL,底线是允许用在不开源商业软件中,意思就是免费使用。

一、在ThinksKing的Plugins里面找到已经解压好的SharpZipLib,使用net-20文件夹中的ICSharpCode.SharpZipLib.dll 。添加至项目引用中。

二、操作指南:

1.1          创建zip文件,并添加文件:

 

using (ZipFile zip = ZipFile.Create(@”E:\test.zip”)){    zip.BeginUpdate();    zip.Add(@”E:\文件1.txt”);    zip.Add(@”E:\文件2.txt”);    zip.CommitUpdate();}

1.2          将文件夹压缩为文件

(new FastZip()).CreateZip(@”E:\test.zip”, @”E:\test\”, true, “”);

最后一个参数是使用正则表达式表示的过滤文件规则。CreateZip方法有3个重载版本,其中有目录过滤参数、文件过滤参数及用于指定是否进行子目录递归的一个bool类型的参数。

1.3          将文件添加到已有zip文件中

using (ZipFile zip = new ZipFile(@”E:\test.zip”)){    zip.BeginUpdate();    zip.Add(@”E:\test.doc”);    zip.CommitUpdate();}

 

1.4          列出zip文件中文件

using (ZipFile zip = new ZipFile(@”E:\test.zip”)){    string list = string.Empty;    foreach (ZipEntry entry in zip)    {        list += entry.Name + “\r\n”;    }    MessageBox.Show(list);}

1.5          删除zip文件中的一个文件

using (ZipFile zip = new ZipFile(@”E:\test.zip”)){    zip.BeginUpdate();    zip.Delete(@”test.doc”);    zip.Delete(@”test22.txt”);    zip.CommitUpdate();}

1.6          解压zip文件中文件到指定目录下

(new FastZip()).ExtractZip(@”E:\test.zip”, @”E:\test\”, “”);

1.7          常用类

  ZipInputStream、GZipInputStream用于解压缩Deflate、GZip格式流,ZipOutputStream、GZipOutputStream用于压缩Deflate、GZip格式流。

  StreamUtil类包含了几个Stream处理辅助方法:

  1) Copy(Stream, Stream, Byte[])用于从一个Stream对象中复制数据到另一Stream对象。有多个重写。

  2) ReadFully(Stream, Byte [])用于从Stream对象中读取所有的byte数据。有多个重写。

三、帮助文档

  在SharpZipLib中有SharpZipLib_0860.chm官方帮助文档。

参考链接:在路上的博文:《

 


 

在处理后台附件上载由于文件较多,需要每个文件单独上传关键是有些文件数据量比较少 也需要单独上传,这样导致后台数据流量较大而且用户操作麻烦.

在处理这方面业务时,可以简化:首先验证用户上传文件的大小,设定不超过1M文件为限制并记录,当用户点击一次操作时后台程序把所有小数据量文件进行压缩成一个单独文件来上传,这样简化用户操作难度 增强用户体验,在获得上载文件时同样把这个文件进行解压本地即可...

使用ICSharpCode.SharpZipLib-(C#)实现解压缩文件的操作类: 完整代码如下
A:ICSharpCode.SharpZipLib.DLL组件下载地址,如果要实现必须在项目中引用该组件DLL
下载地址:
B:完整的操作类代码实例:

using System;using System.Collections.Generic;using System.Linq;using System.Web;//using the Compent Comspacusing System.IO;using System.Text;using System.Threading;using ICSharpCode.SharpZipLib;using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLib.Checksums;namespace TestJqueryAjax {   /**////    /// 使用ICSharpZipCode.Dll实现解压缩   /// Author:chenkai  Time:2009年7月13日22:03:27   /// Version:Beta1.0.0-(测试版)   ///    public class ICSharpZipCodeTest   {         /**////        /// 实现压缩功能       ///        /// 要压缩文件(绝对文件路径)       /// 压缩(绝对文件路径)       /// 压缩比       /// 加密密码       /// 压缩文件描述       /// 
异常信息
public static string MakeZipFile(string[] filenameToZip, string Zipedfiledname, int CompressionLevel, string password, string comment) { try { //使用正则表达式-判断压缩文件路径 System.Text.RegularExpressions.Regex newRegex = new System.Text. RegularExpressions.Regex(@"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*.*))"); if (!newRegex.Match(Zipedfiledname).Success) { File.Delete(Zipedfiledname); return "压缩文件的路径有误!"; } //创建ZipFileOutPutStream ZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname, FileMode.OpenOrCreate)); //判断Password if (password != null && password.Length > 0) { newzipstream.Password = password; } if (comment != null && comment.Length > 0) { newzipstream.SetComment(comment); } //设置CompressionLevel newzipstream.SetLevel(CompressionLevel); //-查看0 - means store only to 9 - means best compression //执行压缩 foreach (string filename in filenameToZip) { FileStream newstream = File.OpenRead(filename);//打开预压缩文件 //判断路径 if (!newRegex.Match(Zipedfiledname).Success) { File.Delete(Zipedfiledname); return "压缩文件目标路径不存在!"; } byte[] setbuffer=new byte[newstream.Length]; newstream.Read(setbuffer,0,setbuffer.Length);//读入文件 //新建ZipEntrity ZipEntry newEntry = new ZipEntry(filename); //设置时间-长度 newEntry.DateTime = DateTime.Now; newEntry.Size = newstream.Length; newstream.Close(); newzipstream.PutNextEntry(newEntry);//压入 newzipstream.Write(setbuffer,0,setbuffer.Length); } //重复压入操作 newzipstream.Finish(); newzipstream.Close(); }catch (Exception e) { //出现异常 File.Delete(Zipedfiledname); return e.Message.ToString(); } return ""; } /**//// /// 实现解压操作 /// /// 要解压文件Zip(物理路径) /// 解压目的路径(物理路径) /// 解压密码 ///
异常信息
public static string UnMakeZipFile(string zipfilename,string UnZipDir,string password) { //判断待解压文件路径 if (!File.Exists(zipfilename)) { File.Delete(UnZipDir); return "待解压文件路径不存在!"; } //创建ZipInputStream ZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename)); //判断Password if (password != null && password.Length > 0) { newinStream.Password = password; } //执行解压操作 try { ZipEntry theEntry; //获取Zip中单个File while ((theEntry = newinStream.GetNextEntry()) != null) { //判断目的路径 if (Directory.Exists(UnZipDir)) { Directory.CreateDirectory(UnZipDir);//创建目的目录 } //获得目的目录信息 string Driectoryname = Path.GetDirectoryName(UnZipDir); string pathname = Path.GetDirectoryName(theEntry.Name);//获得子级目录 string filename = Path.GetFileName(theEntry.Name);//获得子集文件名 //处理文件盘符问题 pathname = pathname.Replace(":", "$");//处理当前压缩出现盘符问题 Driectoryname = Driectoryname + "\\" + pathname; //创建 Directory.CreateDirectory(Driectoryname); //解压指定子目录 if (filename != string.Empty) { FileStream newstream = File.Create(Driectoryname + "\\" + pathname); int size = 2048; byte[] newbyte = new byte[size]; while (true) { size = newinStream.Read(newbyte, 0, newbyte.Length); if (size > 0) { //写入数据 newstream.Write(newbyte, 0, size); } else { break; } newstream.Close(); } } } newinStream.Close(); } catch (Exception se) { return se.Message.ToString(); } finally { newinStream.Close(); } return ""; } }}

参考链接:陈凯的博文:《》

转载地址:http://yqfua.baihongyu.com/

你可能感兴趣的文章
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
【Linux】linux经常使用基本命令
查看>>
HTML模块化:使用HTML5 Boilerplate模板
查看>>
登记申请汇总
查看>>
Google最新截屏案例详解
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>