官方网站: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 "压缩文件的路径有误!";
}
//创建ZipFileOutPutStream
ZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname,
FileMode.OpenOrCreate)); //判断Password
if (password != null && password.Length > )
{
newzipstream.Password = password;
}
if (comment != null && comment.Length > )
{
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,,setbuffer.Length);//读入文件
//新建ZipEntrity
ZipEntry newEntry = new ZipEntry(filename);
//设置时间-长度
newEntry.DateTime = DateTime.Now;
newEntry.Size = newstream.Length;
newstream.Close();
newzipstream.PutNextEntry(newEntry);//压入
newzipstream.Write(setbuffer,,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 "待解压文件路径不存在!";
} //创建ZipInputStream
ZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename)); //判断Password
if (password != null && password.Length > )
{
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 = ;
byte[] newbyte = new byte[size];
while (true)
{
size = newinStream.Read(newbyte, , newbyte.Length);
if (size > )
{
//写入数据
newstream.Write(newbyte, , size);
}
else
{
break;
}
newstream.Close();
}
}
}
newinStream.Close();
}
catch (Exception se)
{
return se.Message.ToString();
}
finally
{
newinStream.Close();
} return "";
}
}
}

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

ICSharpCode.SharpZipLib 开源压缩库使用示例的更多相关文章

  1. 用ICSharpCode.SharpZipLib进行压缩

    今天过中秋节,当地时间(2013-09-08),公司也放假了,正好也闲着没事,就在网上学习学习,找找资料什么的.最近项目上可能会用到压缩的功能,所以自己就先在网上学习了,发现一个不错的用于压缩的DLL ...

  2. ICSharpCode.SharpZipLib实现压缩解压缩

    最近,在项目中经常需要处理压缩和解压缩文件的操作.经过查找,发现了ICSharpCode.SharpZipLib.dll ,这是一个完全由c#编写的Zip, GZip.Tar . BZip2 类库,可 ...

  3. C#使用ICSharpCode.SharpZipLib.dll压缩多个文件

    首先通过NuGet管理安装ICSharpCode.SharpZipLib.dll 以下是压缩的通用方法: using System; using System.IO; using System.Web ...

  4. 利用ICSharpCode.SharpZipLib进行压缩

    #ZipLib is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is im ...

  5. ICSharpCode.SharpZipLib工具压缩与解压缩zip文件

    using System; using System.Collections.Generic; using System.IO; using System.Text; using ICSharpCod ...

  6. ICSharpCode.SharpZipLib.dll 压缩多文件

    网站:http://icsharpcode.github.io/SharpZipLib/ 引用:ICSharpCode.SharpZipLib.dll private string CompassZi ...

  7. C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

    大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, ...

  8. ICSharpCode.SharpZipLib.Zip 压缩文件

    public class ZipFileHelper { List<string> urls = new List<string>(); void Director(strin ...

  9. C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)

    我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...

随机推荐

  1. springboot —— 多数据源

    本文主要介绍如何在一个springboot项目配置两个数据源(mysql和oracle): 1.引进相关依赖 <!-- https://mvnrepository.com/artifact/my ...

  2. Spring Data Redis —— 快速入门

    环境要求:Redis 2.6及以上,javase 8.0及以上: 一.Spring Data Redis 介绍 Spring-data-redis是spring的一部分,提供了在srping应用中通过 ...

  3. javascript返回上一页的三种写法

    window.history.go(-1); //返回上一页 window.history.back(); //返回上一页不会造成死循环 //如果要强行刷新的话就是:window.history.ba ...

  4. SD从零开始45-46

    [原创] SD从零开始45 运输流程的控制 运输业务场景的例子Examples 一个公司可使用不同的运输业务场景,通过不同的处理类型或者运输方式来刻画: 要模型化这些不同的装运,你可以在配置中定义装运 ...

  5. 【Redis】Redis学习(五) Redis cluster模式详解

    一般情况下,使用主从模式加Sentinal监控就可以满足基本需求了,但是当数据量过大一个主机放不下的时候,就需要对数据进行分区,将key按照一定的规则进行计算,并将key对应的value分配到指定的R ...

  6. 8.2、常用模块介绍2:xml,configparser,hashlib

    xml: 介绍:包含关于可扩展标记语言xml的函数 使用: python有三种方法解析XML--SAX,DOM,以及ElementTree,由于xml技术落后,所以这里不对sax,dom介绍: xml ...

  7. MySQL——索引实现原理

    在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 MyISAM引擎使用B+Tr ...

  8. Httprunner学习

    一.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 核心特性: 继 ...

  9. MySQL升级后 MySQL 5.7 时间不兼容问题

  10. Huawei华为交换机 consolep密码和vty密码配置telnet,ssh

    以登录用户界面的认证方式为密码认证,密码为Huawei@123为例,配置如下. <HUAWEI> system-view [HUAWEI] user- [HUAWEI-ui-console ...