ICSharpCode.SharpZipLib 开源压缩库使用示例

官方网站:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx

插件描述: 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官方帮助文档。

参考链接:在路上的博文:《ICSharpCode.SharpZipLib 插件使用示例》

 


 

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

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

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

B:完整的操作类代码实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using the Compent Comspac
using System.IO;
using System.Text;
using System.Threading;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
namespace TestJqueryAjax{/**//// <summary>/// 使用ICSharpZipCode.Dll实现解压缩/// Author:chenkai  Time:2009年7月13日22:03:27/// Version:Beta1.0.0-(测试版)/// </summary>public class ICSharpZipCodeTest{        /**//// <summary>/// 实现压缩功能/// </summary>/// <param name="filenameToZip">要压缩文件(绝对文件路径)</param>/// <param name="Zipedfiledname">压缩(绝对文件路径)</param>/// <param name="CompressionLevel">压缩比</param>/// <param name="password">加密密码</param>/// <param name="comment">压缩文件描述</param>/// <returns>异常信息</returns>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 "压缩文件的路径有误!";}               //创建ZipFileOutPutStreamZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname,FileMode.OpenOrCreate));//判断Passwordif (password != null && password.Length > 0){newzipstream.Password = password;}                if (comment != null && comment.Length > 0){newzipstream.SetComment(comment);}                //设置CompressionLevelnewzipstream.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);//读入文件//新建ZipEntrityZipEntry 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 "";}
       /**//// <summary>/// 实现解压操作/// </summary>/// <param name="zipfilename">要解压文件Zip(物理路径)</param>/// <param name="UnZipDir">解压目的路径(物理路径)</param>/// <param name="password">解压密码</param>/// <returns>异常信息</returns>public static string UnMakeZipFile(string zipfilename,string UnZipDir,string password){//判断待解压文件路径if (!File.Exists(zipfilename)){File.Delete(UnZipDir);return "待解压文件路径不存在!";}//创建ZipInputStreamZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename));//判断Passwordif (password != null && password.Length > 0){newinStream.Password = password;}
            //执行解压操作try{ZipEntry theEntry;
                //获取Zip中单个Filewhile ((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 "";}}
}

参考链接:陈凯的博文:《使用ICSharpCode.SharpZipLib-(C#)实现解压缩文件的操作类》

转载于:https://www.cnblogs.com/rainbow70626/p/4559691.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解析“中国制造2025”VS德国“工业4.0”,一场没有硝烟战争

来源&#xff1a;世界科技创新论坛摘要&#xff1a;“中国制造2025”与德国“工业4.0”都是在新一轮科技革命和产业变革背景下针对制造业发展提出的一个重要战略举措。比较两个战略可以看出各有特点&#xff0c;除了技术基础和产业基础不同之外&#xff0c;他们还存在战略思想等…

SQL- AND OR Order by INSERT INTO

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。 ORDER BY语句用于对结果集进行排序。 ORDER BY 语句默认按照升序对记录进行排序。如果希望用降序&#xff0c;可使用DESC关键字。 INSERT INTO 用于向表格中插入新的行。 语法&#xff1a; INSERT INTO talbe_name …

Imbalanced class problem(ROC, Confusion Matrix)

1 何为 Imbalanced class problem 在分类问题中&#xff0c;有时候一种类别的数据会远远的多于另外一种类别&#xff0c; 但正是这些少量的类别的数据&#xff0c;往往又是极其重要的。 比如信用卡欺诈事件&#xff0c;该事件远远地小于信用卡未被欺诈的事件。 要从信用卡操…

浅谈 EHT 黑洞照片拍摄原理

来源&#xff1a;东晓科学网博客前几天&#xff0c;EHT &#xff08;Event Horizon Telescope&#xff09;(事件水平线望远镜&#xff09;研究团队发布重大新闻&#xff0c;公布了人类首次拍到的黑洞“照片“”&#xff0c;同时公布了7篇由200多名科学家署名的相关论文。所谓黑…

swift开发体验,论objective-c与swift的选择

使用swift开发已经有半年之久了&#xff0c;期间做了一个电商应用&#xff0c;类似京东&#xff0c;苏宁的。主要谈谈感受&#xff0c;swift简洁的语法&#xff0c;不用写分号&#xff0c;所有自己写得工具类&#xff0c;第三方类库&#xff0c;都能自动import&#xff0c;着实…

积分图像(Integral image)

1 问题起源 给定一幅灰度图像&#xff0c;其灰度值如下图所示&#xff0c; 要计算图中深色区域的所有像素点的灰度值之和。 最直接&#xff0c;简单的方法就是将这9个像素值直接相加。 如果深色区域扩大&#xff0c;里面包含成千上万个像素&#xff0c;这种算法的时间复杂度…

vue3(七)-基础入门之事件总线与动态组件

一、事件总线 事件总线使用场景&#xff1a; 两个兄弟组件之间的传参&#xff0c;或者两个没有关联的组件之间的传参 html &#xff1a;引入 publicmsg 与 acceptmsg 自定义组件 (自定义组件名称必须小写) <body><div id"app"><publicmsg></…

机器学习竞争其实是一场数据上的竞争

来源&#xff1a;网络大数据摘要&#xff1a;人工智能的三大发展要素已经是老生常谈了。算法、算力和数据对机器学习的重要性和声望不亚于“谦哥”的喝酒、烫头和抽烟。那些热衷竞争实施机器学习的公司现在惊讶地发现&#xff0c;其实&#xff0c;实施一些算法使机器变得对某一…

实验五 — — Java网络编程及安全

java的第五个实验——Java网络编程及安全 北京电子科技学院 实 验 报 告 课程&#xff1a;Java程序设计  班级&#xff1a;1352  姓名&#xff1a;林涵锦  学号&#xff1a;20135213 成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏    实验日期&…

Viola-Jones人脸检测详解

在人脸检测中&#xff0c;Viola-Jones算法是一种非常经典的算法&#xff0c;该算法在2001年的CVPR上提出&#xff0c;因其高效快速的检测而被广泛使用。 这个算法用来检测正面的人脸图像&#xff0c;对于侧脸图像的检测不是很稳健。 算法可以被分为以下几个部分&#xff1a; …

中国的高铁世界第一,为何汽车却和德国、日本差距很大?

来源&#xff1a;中国经济大讲堂摘要&#xff1a;靠引进技术发展&#xff0c;可以换来制造技术&#xff0c;建成一定规模、一定水平的体系。但我们在抓住机遇、引进技术发展的同时&#xff0c;或者发展的后期&#xff0c;等我们有了市场&#xff0c;有了钱之后&#xff0c;应该…

Ubuntu 安装和使用 jupyter 出现的问题总结

1、在终端中输入‘sudo pip3 install jupyter’, 出现黄色的‘warring,如下&#xff1a; The directory /home/stone/.cache/pip/http or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner o…

SSH反向连接及Autossh

转自&#xff1a; http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html 0.接触Linux恐怕对SSH再熟悉不过了&#xff0c;还有scp&#xff0c;sftp各种方便的功能&#xff0c;一般的使用都需要ip:port&#xff08;如果不是默认22的话&#xff09;&#xff0c;但有些…

硬核干货|揭示波士顿动力机器人背后的专利技术(上)

来源&#xff1a;超凡知识产权&#xff0c;机器人大讲堂整理发布摘要&#xff1a;如果说在腿足机器人领域里&#xff0c;有一个让人闻之色变的变态企业&#xff0c;那就非波士顿动力莫属了。深耕几十年的技术积累加上“不谙世事”的科研态度&#xff0c;使得BD一直保持在腿足机…

(Python+Tensorflow)编程踩坑集锦

(PythonTensorflow)编程踩坑集锦 1 开发环境安装 推荐视频&#xff1a;https://www.icourse163.org/learn/PKU-1002536002?tid1452937471#/learn/content?typedetail&id1229556595&cid1246770451&replaytrue 1.1 Tensorflow2安装过程&#xff08;Win10平台&am…

浮动在IE6,7下的一些问题

1、首先如果两个元素要并在同一行&#xff0c;使用float最好两个都加浮动 2、IE6下双边距问题&#xff0c;当有块级元素浮动的时候&#xff0c;该元素的横向margin值会被放大为两倍&#xff0c;解决办法&#xff1a;给该元素加display&#xff1a;inline即可。 3、li的一些问题…

复盘亚马逊从优秀到卓越的24年

来源&#xff1a;方证证券4月18日&#xff0c;据报道&#xff0c;亚马逊公司计划在今年7月中旬关闭其在中国的本土电商业务&#xff0c;将业务重点转移至更有盈利空间的海外购和云服务上。对此&#xff0c;亚马逊方面4月18日回应澎湃新闻记者称&#xff0c;“明确的是&#xff…

Python time datetime常用时间处理方法

常用时间转换及处理函数&#xff1a; import datetime # 获取当前时间 d1 datetime.datetime.now() print d1 # 当前时间加上半小时 d2 d1 datetime.timedelta(hours0.5) print d2 # 格式化字符串输出 d3 d2.strftime(%Y-%m-%d %H:%M:%S) print d3 # 将字符串转化为时间类型…

深度!移动机器人(AGV)产业链全分析

来源&#xff1a;广证恒生、乐晴智库精选产业链&#xff1a;下游需要求旺盛带动下游产业链发展 移动机器人(AGV)是工业机器人的一种。它由计算机控制&#xff0c;具有移动、自动导航、多传感器控制、网络交互等功能&#xff0c;在实际生产中最主要的用途是搬运&#xff0c;可以…

404页面自动跳转javascript

5秒后自动跳到系统<a href"login.aspx">登录界面</a>...还剩<span id"time" style"font-weight:bold;color: blue">5</span>秒&#xff01; <script type"text/javascript"> var i 5; …