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 "压缩文件的路径有误!";
               }
                //创建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 "";
       }
       /**//// <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 > 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 "";
       }
   }
}

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

时间: 2024-10-07 03:55:14

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

ICSharpCode.SharpZipLib实现压缩解压缩

最近,在项目中经常需要处理压缩和解压缩文件的操作.经过查找,发现了ICSharpCode.SharpZipLib.dll ,这是一个完全由c#编写的Zip, GZip.Tar . BZip2 类库,可以方便地支持这几种格式的压缩解压缩,详细参考了 ICSharpCode.SharpZipLib 插件使用示例.整理很详细.记录备用.

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

转自:http://www.cnblogs.com/xuanye/archive/2011/10/19/2217211.html 大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, BZip2 和Tar格式,其实没啥好说的直接上代码 1 /// <summary> 2 /// Zip压缩与解压缩 3 /// </summary&

使用 ICSharpCode.SharpZipLib.Zip压缩解压文件

/// <summary> /// 功能:解压zip格式的文件. /// </summary> /// <param name="zipFilePath">压缩文件路径</param> /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param> /// <returns>解压是否成功</ret

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

我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib.dll 支持库 第二步:创建一个压缩和解压的demo项目 第三步:查看压缩和解压的文件的结果 二.demo演示(包括源码和界面) 1.下载文件压缩和解压的支持库dll ,下载地址:http://pan.baidu.com/s/1pLausnL 2.创建window创建项目 1) 添加引用(文件压缩

ICSharpCode.SharpZipLib压缩的文件不能解压的原因

今天用ICSharpCode.SharpZipLib做压缩,发现一个问题:就是压缩出来的文件,手动解压缩没有问题,但是用程序解压缩就报错.百思不得其解. 后来,偶然放到百度云上,发现百度云预览出来的压缩包中的文件大小竟然是4G!真正的文件只有32K,原来如此! 经常查找代码,原来是压缩的时候,没有判断文件是否压缩结束,结果写进去的文件结尾不对,采用如下代码以后,问题解决!注意红色箭头处的代码.

SharpZipLib 是一个开源的 .NET 压缩库

SharpZipLib 是一个开源的 .NET 压缩库,支持 zip 以及存储和 deflate 压缩模式,支持一下 .NET 版本: .NET 1.1 .NET 2.0 .NET 3.5 .NET 4.0 .NET Compact Framework 1.0 .NET Compact Framework 2.0 You can download the Assemblies?here

基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// <summary> /// 压缩 /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetZipName"></param> /// <param name=&qu

C/C++ 开源库及示例代码

C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1.3 环形缓冲 2.1.4 多维数组 2.1.5 图 2.2 对容器的操作 2.3 字符串处理 2.3.1 字符集 2.3.2 字符串格式化 2.3.3 正则表达式 2.3.4 (其它) 2.4 内存相关 2.4.1 智能指针 2.4.2 内存池 2.5 时间 & 日期 2.6 编码 & 解码

C# 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩

ICSharpCode.SharpZipLib.dll下载地址 1.压缩某个指定目录下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志. #region 压缩logs目录下日志 public static void CompresslogDic() { try { string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "logs"; DirectoryInfo logsDic =