一、使用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. 防范DDOS攻击脚本

    防范DDOS攻击脚本 #防止SYN攻击 轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables ...

  2. 如何让你的eclipse运行更快和eclipse常用快捷键

    方案来之网络,已自测... 原地址:戳进来 1.在eclipse启动的时候,它总是会搜索让其运行的jre,往往就是这个搜索过程让eclipse启动变慢了.(没设置时,等2-3s出现进度条,设置后直接出 ...

  3. Install-Package 那点事儿

    为了练习使用SignaR,新建了一个.net 4.0的MVC4项目, 第一步,不用说就是先将SignaR安装到项目中,考虑到SignaR 目前已经更新到2.0 并且无法在 4.0框架下面使用,此时通过 ...

  4. angularJs工作日记-自定义指令Directive01

    新项目组使用完善的angularMVVM设计思路架构,很庆幸能够来到这个项目组,在这里的每一天都能够学习到新的知识,为了防止以后忘记,记录一下个人的理解 首先接触最多的是directive,direc ...

  5. 移动端日期控件 mobiscroll

    Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.可以让用户很方便的只需要滑动数字既可以选择 ...

  6. IE6 Bug overflow:hidden失效

    下面就是我所收集或遇到的IE6 Bug之一:overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidd ...

  7. sql数据库优化技巧汇总

    (转)SQL 优化原则 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着 ...

  8. AndroidStudio 更新gradle Error:Failed to complete Gradle execution. Cause: Connection reset

      Android Studio 报错:Error:Failed to complete Gradle execution.  Cause: Connection reset.把最新可以运行的项目中g ...

  9. OGNL-action

    需要注意的是,action需要先被调用到,OGNL才能成功,因为action被执行才被压入值栈 package com.wolfgang.action; import com.opensymphony ...

  10. 浅谈JS DDoS攻击原理与防御

    分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意 ...