说说我利用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. Tomcat详解及SNS系统的部署实现

    Tomcat详解及SNS系统的部署实现   http://jungege.blog.51cto.com/4102814/1409290

  2. springmvc上传图片并显示--支持多图片上传

    实现上传图片功能在Springmvc中很好实现.现在我将会展现完整例子. 开始需要在pom.xml加入几个jar,分别是: <dependency> <groupId>comm ...

  3. shell编程——

    一.分支语句 语法:(多路分支) case word in patterm1) list A ;; pattern2) list B ;; patternN) list N ;; esac例子:cas ...

  4. 利用NSAttributedString实现图文混排

    UILabel 和 UITextView 都能添加 NSAttributedString 属性字符串,通过这一点,可以实现带有属性的文字和文字内包含图片的文本内容展示. 效果如下:   1-初始化可变 ...

  5. 《Cracking the Coding Interview》——第9章:递归和动态规划——题目7

    2014-03-20 03:35 题目:实现画图的Flood Fill操作. 解法:DFS和BFS皆可,但BFS使用的队列在时间复杂度上常数项比较大,速度略慢,所以我选了DFS.当然,如果图很大的话D ...

  6. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  7. nginx配置及HTTPS配置示例

    一.nginx简单配置示例 user www www; worker_processes ; #error_log logs/error.log; #error_log logs/error.log ...

  8. loadrunner检查点设置失败,日志中SaveCount无法被正常统计出来

    在脚本正确的情况下的web_reg_find检查点检查失败,SaveCount无法被正常统计出来. 在检查项Text为中文的情况下, ******(我是被录制下来的代码) web_reg_find(& ...

  9. 使用python 3导入MySQLdb 报No module named 'MySQLdb'异常错误

    MySQLdb只支持Python2.*,还不支持3.* 可以用PyMySQL代替安装PyMySQL后,在使用模块时使用import pymysql as MySQLdb 后续使用方式与MySQLdb  ...

  10. springboot配多数据源

    多数据源配置 https://blog.csdn.net/neosmith/article/details/61202084 https://www.cnblogs.com/zhangboyu/p/7 ...