一、使用ICSharpCode.SharpZipLib.dll;

下载地址

http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

二、基于(ICSharpCode.SharpZipLib.dll)的文件压缩方法,类文件

压缩文件

  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using ICSharpCode.SharpZipLib.Checksums;
  5. using ICSharpCode.SharpZipLib.Zip;
  6. namespace FileCompress
  7. {
  8. /// <summary>
  9. /// 功能:压缩文件
  10. /// creator chaodongwang 2009-11-11
  11. /// </summary>
  12. public class ZipClass
  13. {
  14. /// <summary>
  15. /// 压缩单个文件
  16. /// </summary>
  17. /// <param name="FileToZip">被压缩的文件名称(包含文件路径)</param>
  18. /// <param name="ZipedFile">压缩后的文件名称(包含文件路径)</param>
  19. /// <param name="CompressionLevel">压缩率0(无压缩)-9(压缩率最高)</param>
  20. /// <param name="BlockSize">缓存大小</param>
  21. public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)
  22. {
  23. //如果文件没有找到,则报错
  24. if (!System.IO.File.Exists(FileToZip))
  25. {
  26. throw new System.IO.FileNotFoundException("文件:" + FileToZip + "没有找到!");
  27. }
  28. if (ZipedFile == string.Empty)
  29. {
  30. ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";
  31. }
  32. if (Path.GetExtension(ZipedFile) != ".zip")
  33. {
  34. ZipedFile = ZipedFile + ".zip";
  35. }
  36. ////如果指定位置目录不存在,创建该目录
  37. //string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("/"));
  38. //if (!Directory.Exists(zipedDir))
  39. //    Directory.CreateDirectory(zipedDir);
  40. //被压缩文件名称
  41. string filename = FileToZip.Substring(FileToZip.LastIndexOf('//') + 1);
  42. System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
  43. System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
  44. ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
  45. ZipEntry ZipEntry = new ZipEntry(filename);
  46. ZipStream.PutNextEntry(ZipEntry);
  47. ZipStream.SetLevel(CompressionLevel);
  48. byte[] buffer = new byte[2048];
  49. System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
  50. ZipStream.Write(buffer, 0, size);
  51. try
  52. {
  53. while (size < StreamToZip.Length)
  54. {
  55. int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
  56. ZipStream.Write(buffer, 0, sizeRead);
  57. size += sizeRead;
  58. }
  59. }
  60. catch (System.Exception ex)
  61. {
  62. throw ex;
  63. }
  64. finally
  65. {
  66. ZipStream.Finish();
  67. ZipStream.Close();
  68. StreamToZip.Close();
  69. }
  70. }
  71. /// <summary>
  72. /// 压缩文件夹的方法
  73. /// </summary>
  74. public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)
  75. {
  76. //压缩文件为空时默认与压缩文件夹同一级目录
  77. if (ZipedFile == string.Empty)
  78. {
  79. ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("/") + 1);
  80. ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("/")) +"//"+ ZipedFile+".zip";
  81. }
  82. if (Path.GetExtension(ZipedFile) != ".zip")
  83. {
  84. ZipedFile = ZipedFile + ".zip";
  85. }
  86. using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))
  87. {
  88. zipoutputstream.SetLevel(CompressionLevel);
  89. Crc32 crc = new Crc32();
  90. Hashtable fileList = getAllFies(DirToZip);
  91. foreach (DictionaryEntry item in fileList)
  92. {
  93. FileStream fs = File.OpenRead(item.Key.ToString());
  94. byte[] buffer = new byte[fs.Length];
  95. fs.Read(buffer, 0, buffer.Length);
  96. ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));
  97. entry.DateTime = (DateTime)item.Value;
  98. entry.Size = fs.Length;
  99. fs.Close();
  100. crc.Reset();
  101. crc.Update(buffer);
  102. entry.Crc = crc.Value;
  103. zipoutputstream.PutNextEntry(entry);
  104. zipoutputstream.Write(buffer, 0, buffer.Length);
  105. }
  106. }
  107. }
  108. /// <summary>
  109. /// 获取所有文件
  110. /// </summary>
  111. /// <returns></returns>
  112. private Hashtable getAllFies(string dir)
  113. {
  114. Hashtable FilesList = new Hashtable();
  115. DirectoryInfo fileDire = new DirectoryInfo(dir);
  116. if (!fileDire.Exists)
  117. {
  118. throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");
  119. }
  120. this.getAllDirFiles(fileDire, FilesList);
  121. this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);
  122. return FilesList;
  123. }
  124. /// <summary>
  125. /// 获取一个文件夹下的所有文件夹里的文件
  126. /// </summary>
  127. /// <param name="dirs"></param>
  128. /// <param name="filesList"></param>
  129. private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)
  130. {
  131. foreach (DirectoryInfo dir in dirs)
  132. {
  133. foreach (FileInfo file in dir.GetFiles("*.*"))
  134. {
  135. filesList.Add(file.FullName, file.LastWriteTime);
  136. }
  137. this.getAllDirsFiles(dir.GetDirectories(), filesList);
  138. }
  139. }
  140. /// <summary>
  141. /// 获取一个文件夹下的文件
  142. /// </summary>
  143. /// <param name="strDirName">目录名称</param>
  144. /// <param name="filesList">文件列表HastTable</param>
  145. private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)
  146. {
  147. foreach (FileInfo file in dir.GetFiles("*.*"))
  148. {
  149. filesList.Add(file.FullName, file.LastWriteTime);
  150. }
  151. }
  152. }
  153. }

解压文件

  1. using System;
  2. using System.Collections.Generic;
  3. /// <summary>
  4. /// 解压文件
  5. /// </summary>
  6. using System;
  7. using System.Text;
  8. using System.Collections;
  9. using System.IO;
  10. using System.Diagnostics;
  11. using System.Runtime.Serialization.Formatters.Binary;
  12. using System.Data;
  13. using ICSharpCode.SharpZipLib.Zip;
  14. using ICSharpCode.SharpZipLib.Zip.Compression;
  15. using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
  16. namespace FileCompress
  17. {
  18. /// <summary>
  19. /// 功能:解压文件
  20. /// creator chaodongwang 2009-11-11
  21. /// </summary>
  22. public class UnZipClass
  23. {
  24. /// <summary>
  25. /// 功能:解压zip格式的文件。
  26. /// </summary>
  27. /// <param name="zipFilePath">压缩文件路径</param>
  28. /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
  29. /// <param name="err">出错信息</param>
  30. /// <returns>解压是否成功</returns>
  31. public void UnZip(string zipFilePath, string unZipDir)
  32. {
  33. if (zipFilePath == string.Empty)
  34. {
  35. throw new Exception("压缩文件不能为空!");
  36. }
  37. if (!File.Exists(zipFilePath))
  38. {
  39. throw new System.IO.FileNotFoundException("压缩文件不存在!");
  40. }
  41. //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
  42. if (unZipDir == string.Empty)
  43. unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
  44. if (!unZipDir.EndsWith("/"))
  45. unZipDir += "/";
  46. if (!Directory.Exists(unZipDir))
  47. Directory.CreateDirectory(unZipDir);
  48. using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
  49. {
  50. ZipEntry theEntry;
  51. while ((theEntry = s.GetNextEntry()) != null)
  52. {
  53. string directoryName = Path.GetDirectoryName(theEntry.Name);
  54. string fileName = Path.GetFileName(theEntry.Name);
  55. if (directoryName.Length > 0)
  56. {
  57. Directory.CreateDirectory(unZipDir + directoryName);
  58. }
  59. if (!directoryName.EndsWith("/"))
  60. directoryName += "/";
  61. if (fileName != String.Empty)
  62. {
  63. using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
  64. {
  65. int size = 2048;
  66. byte[] data = new byte[2048];
  67. while (true)
  68. {
  69. size = s.Read(data, 0, data.Length);
  70. if (size > 0)
  71. {
  72. streamWriter.Write(data, 0, size);
  73. }
  74. else
  75. {
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. }

ICSharpCode.SharpZipLib压缩解压的更多相关文章

  1. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  2. SharpZipLib压缩解压

    一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...

  3. SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  4. C#基础知识之SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  5. C#使用SharpZipLib压缩解压文件

    #region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...

  6. 通过SharpZipLib来压缩解压文件

    在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更 ...

  7. 使用SharpZIpLib写的压缩解压操作类

    使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...

  8. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

  9. 使用C#压缩解压rar和zip格式文件

    为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...

随机推荐

  1. Eclipse Git和sourceTree用法

    Eclipse Git和sourceTree用法 Eclipse Git: 提交代码到git: 1.team->Repository->pull 若没有冲突: 2.team->com ...

  2. JavaScript 学习笔记之线程异步模型

    核心的javascript程序语言并没有包含任何的线程机制,客户端javascript程序也没有任何关于线程的定义,事件驱动模式下的javascript语言并不能实现同时执行,即不能同时执行两个及以上 ...

  3. 如何更有效学习php开源项目的源码

    一.先把源代码安装起来,结合它的文档和手册,熟悉其功能和它的应用方式. 二.浏览源代码的目录结构,了解各个目录的功能. 三.经过以上两步后相信你对这个开源的产品有了一个初步的了解了,那现在就开始分析它 ...

  4. 请大神帮忙解决 jquery 控制 li 标签问题

    <li class="active"><a href="#1" data-toggle="tab">日志详细情况&l ...

  5. 【python】闰年规则

    公历闰年判定遵循的规律为: 四年一闰,百年不闰,四百年再闰. 公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)1.能被4整除而不能被100整除.2.能被400整除.

  6. java 正则操作之获取

    // 正则操作 获取import java.util.regex.*;class Demo{ public static void main(String[] args){  String str=& ...

  7. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  8. 学习Swift -- 错误处理

    错误处理 错误处理是响应错误以及从错误中返回的过程.swift提供第一类错误支持,包括在运行时抛出,捕获,传送和控制可回收错误. 一些函数和方法不能总保证能够执行所有代码或产生有用的输出.可空类型用来 ...

  9. Spring MVC和Struts2的区别

    1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...

  10. 30+最佳Ajax jQuery的自动完成插件的例子

    在这篇文章中,我们将介绍35个jQuery AJAX的自动完成提示例子. jQuery 的自动完成功能,使用户快速找到并选择一定的价值.每个人都想要快速和即时搜索输入栏位,因为这个原因,许 流行的搜索 ...