说说我利用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. 编译IOS下 libpcap1.7.2

    1.修改build-libpcap.sh libpcap版本号 2.执行脚本编译 出现问题: 2.发现configure过后,Makefile存在问题 实际configure的-arch armv7s ...

  2. android gesture检测

    1.关于on<TouchEvent>的返回值 a return value of true from the individual on<TouchEvent> methods ...

  3. 《Cracking the Coding Interview》——第2章:链表——题目3

    2014-03-18 02:25 题目:给定一个单链表中间的节点,删掉那个节点. 解法:把后面节点的数据域拷到当前节点来,然后删除后面那个节点.当前节点不是尾巴,所以后面不为空. 代码: // 2.2 ...

  4. DOS程序员手册(六)

    217页 程序的主要部分后面是主程序所使用的许多小的扩充内存功能.将这些功能组合起 来这些功能便覆盖了扩充内存的操作,尽管还可能想向它们添加错误检查. 程序所包含的函数有: emmtest   检验内 ...

  5. DOS程序员手册(五)

    第8章磁           盘       学习编程语言,常常是从基本的输入和输出入手的(正如第5.6和第7章曾介绍的一 样).到目前为止,我们不仅学习了怎样输入和输出数据,还学习了如何进行数据操作 ...

  6. Python代码书写规范

    Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...

  7. jenkins构建定时任务

    jenkins构建定时任务的主要两种形式 1.Build periodically:周期性构建项目,无论有没有代码更新到时间都会构建项目 2.Poll SCM:定时检查源码变更(根据SCM软件的版本号 ...

  8. Python学习-django-ModelForm组件

    ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...

  9. spring boot打war包启动Tomcat失败

    Tomcat启动失败:最后一个causy by :java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getMa ...

  10. Heat 如何来实现和支持编排

    编排 编排,顾名思义,就是按照一定的目的依次排列.在 IT 的世界里头,一个完整的编排一般包括设置服务器上机器.安装 CPU.内存.硬盘.通电.插入网络接口.安装操作系统.配置操作系统.安装中间件.配 ...