说说我利用ICSharpCode进行压缩和解压缩的一些自己的一下实践过程

1:组件下载地址

参考文章:C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

2: 文件类

//****************************************************************************************
//作者:轻狂书生
//博客地址:http://www.cnblogs.com/xiaoshuai1992
//create: 2014/2/26
//功能:实现文件压缩
//使用方法:设置参数进行压缩
//***************************************************************************************** using System;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
using System.Text; namespace ZipCompress
{
public class CompressFile
{
/// <summary>
/// 压缩文件参数
/// </summary>
public ZipParameter ZipParameter { get; set; }
/// <summary>
/// 压缩文件参数
/// </summary>
public DeZipParameter DeZipParameter { get; set; }
/// <summary>
/// 压缩文件参数
/// </summary>
public ZipFolderParameter ZipFolderParameter { get; set; } /// <summary>
/// 压缩文件返回压缩后的信息
/// </summary>
/// <returns>string 返回压缩后的提示信息</returns>
public void Compress()
{
FileStream Zip_File;
ZipOutputStream ZipStream;
ZipEntry ZipEntry;
//string rtnMessage = "";//返回的信息 try
{
//循环文件,如果文件不存在就不添加的压缩里面
for (int i = ; i < ZipParameter.ZIPFileList.Count; i++)
{
if (!File.Exists(ZipParameter.ZIPFileList[i]))
{
ZipParameter.ZIPFileList.RemoveAt(i);
i--;
} }
//没有有文件下面的压缩不执行
if (ZipParameter.ZIPFileList.Count == )
{
return;
}
//没有目录进行创建
if (!Directory.Exists(ZipParameter.ZIPDirectoryName))
{
Directory.CreateDirectory(ZipParameter.ZIPDirectoryName);
} // 解决文档名称乱码问题,出现乱码就是因为CodePage不对
Encoding gbk = Encoding.GetEncoding("gbk");
ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; //文件路径,文档路径与文件名称
string strPath = ZipParameter.ZIPDirectoryName + ZipParameter.ZIPName; Zip_File = File.Create(strPath);
ZipStream = new ZipOutputStream(Zip_File); ZipStream.Password = ZipParameter.Password;
ZipStream.SetLevel(ZipParameter.Level); foreach (string FileToZip in ZipParameter.ZIPFileList)
{
Zip_File = File.OpenRead(FileToZip);
byte[] buffer = new byte[Zip_File.Length];
Zip_File.Read(buffer, , buffer.Length);
Zip_File.Close();
ZipEntry = new ZipEntry(Path.GetFileName(FileToZip));
ZipStream.PutNextEntry(ZipEntry);
ZipStream.Write(buffer, , buffer.Length);
}
ZipStream.Finish();
ZipStream.Close();
Zip_File.Close(); }
catch (Exception ex)
{
throw ex;
}
finally
{
GC.Collect();
GC.Collect();
}
} /// <summary>
/// 压缩文件夹
/// </summary>
/// <returns></returns>
public void CompressFolder()
{
FastZip fz = new FastZip();
fz.CreateZip(ZipFolderParameter.ZipFileName, ZipFolderParameter.SourceDirectory, ZipFolderParameter.Recurse, ZipFolderParameter.FileFilter); } /// <summary>
/// 解压缩文件,可以解压到下层文件夹
/// </summary>
/// <returns>提示信息</returns>
public void Decompress()
{
//路径处理
string strDirectory = DeZipParameter.ZIPDirectoryName;
if (strDirectory == "")
strDirectory = Directory.GetCurrentDirectory();
if (!strDirectory.EndsWith("\\"))
strDirectory = strDirectory + "\\";
try
{
using (ZipInputStream s = new ZipInputStream(File.OpenRead(DeZipParameter.ZIPFullPath)))
{
s.Password = DeZipParameter.Password;
ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = "";
string pathToZip = "";
pathToZip = theEntry.Name; if (pathToZip != "")
directoryName = Path.GetDirectoryName(pathToZip) + "\\"; string fileName = Path.GetFileName(pathToZip); Directory.CreateDirectory(strDirectory + directoryName); if (fileName != "")
{
if ((File.Exists(strDirectory + directoryName + fileName)) || (!File.Exists(strDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = File.Create(strDirectory + directoryName + fileName))
{
int size = ;
byte[] data = new byte[];
while (true)
{
size = s.Read(data, , data.Length); if (size > )
streamWriter.Write(data, , size);
else
break;
}
streamWriter.Close();
}
}
}
}
s.Close();
}
}
catch (Exception ex)
{
throw ex;
}
} }
}

3:参数类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ZipCompress
{
/// <summary>
/// 解压缩的一些属性
/// </summary>
public class DeZipParameter
{
private string zip_FullPath = "";
private string zip_DirectoryName = "";
private string zip_Password = "";
/// <summary>
/// 要解压缩的文件的完整路径
/// </summary>
public string ZIPFullPath
{
get { return zip_FullPath; }
set { zip_FullPath = value; }
} /// <summary>
/// 解压缩的文件路径
/// </summary>
public string ZIPDirectoryName
{
get { return zip_DirectoryName; }
set { zip_DirectoryName = value; }
} /// <summary>
/// 加密密碼
/// </summary>
public string Password
{
get { return zip_Password; }
set { zip_Password = value; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ZipCompress
{
/// <summary>
/// 压缩文件的类
/// </summary>
public class ZipParameter
{
private string zip_Name = "";
private string zip_DirectoryName = "";
private List<string> zip_FileList = new List<string>();
private string zip_Password = "";
private int zip_Level = ;
/// <summary>
/// 压缩后的文件名称
/// </summary>
public string ZIPName
{
get { return zip_Name; }
set { zip_Name = value; }
} /// <summary>
/// 压缩的文件路径
/// </summary>
public string ZIPDirectoryName
{
get { return zip_DirectoryName; }
set { zip_DirectoryName = value; }
}
/// <summary>
/// 压缩的文件列表
/// </summary>
public List<string> ZIPFileList
{
get { return zip_FileList; }
set { zip_FileList = value; }
}
/// <summary>
/// 加密密碼
/// </summary>
public string Password
{
get { return zip_Password; }
set { zip_Password = value; }
}
/// <summary>
/// 压缩比例等级,默认为6,0 - store only to 9 - means best compression
/// </summary>
public int Level
{
get { return zip_Level; }
set { zip_Level = value; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ZipCompress
{
/// <summary>
/// 压缩文件夹的类
/// </summary>
public class ZipFolderParameter
{
private string zipFileName = "";
private string sourceDirectory = "";
private bool recurse = true;
private string fileFilter = "";
/// <summary>
/// 生成的压缩文件
/// </summary>
public string ZipFileName
{
get { return zipFileName; }
set { zipFileName = value; }
} /// <summary>
/// 待压缩的文件夹
/// </summary>
public string SourceDirectory
{
get { return sourceDirectory; }
set { sourceDirectory = value; }
}
/// <summary>
/// 文件过滤,即决定那些后缀的文件被压缩
/// </summary>
public string FileFilter
{
get { return fileFilter; }
set { fileFilter = value; }
}
/// <summary>
/// 是否遍历子目录,True就遍历,False则不遍历
/// </summary>
public bool Recurse
{
get { return recurse; }
set { recurse = value; }
}
}
}

4:使用

            ZipParameter zp = new ZipParameter();
zp.Password = "";
zp.Level = ;
zp.ZIPDirectoryName = @"C:\Users\Public\Pictures\Sample Pictures\";
zp.ZIPName = "Test.zip";
zp.ZIPFileList.Add(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");
zp.ZIPFileList.Add(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
zp.ZIPFileList.Add(@"C:\Users\WH130406P\Documents\RelatedTemplate.xlsx"); DeZipParameter dzp = new DeZipParameter();
dzp.ZIPFullPath = @"D:\项目必备\开发实例\wf20131124.zip";
dzp.ZIPDirectoryName = @"C:\Users\Public\Pictures\Sample Pictures\Test";
dzp.Password = ""; ZipFolderParameter zfp = new ZipFolderParameter();
zfp.ZipFileName = @"C:\Users\Public\Pictures\Sample Pictures\zipFolder.zip";
zfp.SourceDirectory = @"D:\xs\項目";
zfp.Recurse = true; CompressFile cprFile = new CompressFile();
cprFile.ZipParameter = zp;
cprFile.DeZipParameter = dzp;
cprFile.ZipFolderParameter = zfp;
cprFile.Compress();
cprFile.Decompress();
cprFile.CompressFolder();

上面都是我使用的过程,都是实践成功了的

利用ICSharpCode进行压缩和解压缩的更多相关文章

  1. C# 利用ICSharpCode.SharpZipLib.dll 实现压缩和解压缩文件

    我们 开发时经常会遇到需要压缩文件的需求,利用C#的开源组件ICSharpCode.SharpZipLib, 就可以很容易的实现压缩和解压缩功能. 压缩文件: /// <summary> ...

  2. 在C#中利用SharpZipLib进行文件的压缩和解压缩收藏

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net(http://www.icsharpcode.net/OpenSource/SharpZipL ...

  3. .net 利用 GZipStream 压缩和解压缩

    1.GZipStream 类 此类在 .NET Framework 2.0 版中是新增的. 提供用于压缩和解压缩流的方法和属性 2.压缩byte[] /// <summary> /// 压 ...

  4. 利用SharpZipLib进行字符串的压缩和解压缩

    http://www.izhangheng.com/sharpziplib-string-compression-decompression/ 今天搞了一晚上压缩和解压缩问题,java压缩的字符串,用 ...

  5. C#利用SharpZipLib进行文件的压缩和解压缩

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...

  6. C#- 压缩和解压缩的研究 .

    用了第二种方法,感觉很不错,其他都没用过了.摘录下来,做一个备忘. 最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip ...

  7. .net中压缩和解压缩的处理

    最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip 参考代码如下: //======================= ...

  8. iOS中使用ZipArchive压缩和解压缩文件-备

    为什么我需要解压缩文件 有许多原因能解释为什么我要在工程中使用压缩和解压缩功能,下面是几个常见的原因: 苹果App Store的50M下载限制 苹 果公司出于流量的考虑,规定在非WIFI环境下,限制用 ...

  9. Java 的zip压缩和解压缩

    Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...

随机推荐

  1. 这是我见过最厉害的--智能代码生成器、html+js+底层+sql全都有、瓦特平台

    1:直接上图.图片有点多.我就没全部上传了. (demo.使用方法.数据库bak)下载:http://pan.baidu.com/s/1ntE5bDn 起源: 之前有好多人问我代码生成器的源码.我发了 ...

  2. 《Cracking the Coding Interview》——第18章:难题——题目9

    2014-04-29 04:18 题目:有一连串的数被读入,设计一个数据结构,能随时返回当前所有数的中位数. 解法:用一个大顶堆,一个小顶堆将数分成数量最接近的两份,就能轻松得到中位数了. 代码: / ...

  3. 《Cracking the Coding Interview》——第17章:普通题——题目2

    2014-04-28 22:05 题目:写个程序判断三连棋哪一方赢了. 解法:三个相同的棋子连成一条横线,竖线或者对角线就判断为赢了. 代码: // 17.2 Write an algorithm t ...

  4. python学习笔记四:lambda表达式和switch

    一.定义 lambda arg1,arg2... : returnValue 二.示例 #!/usr/bin/python def f(x,y): return x*y print f(2,3) g ...

  5. 最近做group assignment需要些加密的知識

    需求:A給B單向發的數據需要被加密,A和B都可以看到原文.加密后,就算傳輸的過程被竊取,也無法得知數據原文.A可以是任何客戶端. 解決:常用的MD5,sha1等常用的加密算法為單向不可逆,顯然不符合需 ...

  6. asp.net连接SQL server,SQLLite,Oracle,Access数据库

    asp.net中连接数据库有两种方式为appSettings和connectionStrings connectionStrings比较常用,所以只讲一下connectionStrings方式的连接 ...

  7. Ajax---概念介绍

    Ajax不是某种编程语言,是一种在无需重新加载整个网页的情况下能够更新部分网页的技术. 运用HTML和CSS来实现页面,表达信息: 运用XMLHttpRequest和Web服务器进行数据的异步交换: ...

  8. linux服务进程管理

    1.查看linux占用内存/CPU最多的进程 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用CPU最多的1 ...

  9. bzoj 2618 半平面交模板+学习笔记

    题目大意 给你n个凸多边形,求多边形的交的面积 分析 题意\(=\)给你一堆边,让你求半平面交的面积 做法 半平面交模板 1.定义半平面为向量的左侧 2.将所有向量的起点放到一个中心,以中心参照进行逆 ...

  10. UOJ356 【JOI2017春季合宿】Port Facility

    暴力就是O(n^2)连边,二分图,这样只有22分. 我们考虑优化建边,我们按照左端点排序,对于一个新加进来的线段,我们向左端点距其最近的和他相交的线段连边,别的相交的我们连同色边,当一个点连了两条同色 ...