1. public class ZipFileHelper
  2. {
  3. List<string> urls = new List<string>();
  4. void Director(string dir)
  5. {
  6. DirectoryInfo d = new DirectoryInfo(dir);
  7. FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
  8. foreach (FileSystemInfo fsinfo in fsinfos)
  9. {
  10. if (fsinfo is DirectoryInfo) //判断是否为文件夹
  11. {
  12. Director(fsinfo.FullName);//递归调用
  13. }
  14. else
  15. {
  16. // Console.WriteLine(fsinfo.FullName);//输出文件的全部路径
  17. urls.Add(fsinfo.FullName);
  18. }
  19.  
  20. }
  21. }
  22. ///<summary>
  23. /// 创建ZIP文件
  24. ///</summary>
  25. public void CreateZipFile(string dir, string sTempFile, string sPassWord)
  26. {
  27. try
  28. {
  29. Director(dir);
  30. var files = urls.ToArray();
  31. using (ZipOutputStream s = new ZipOutputStream(File.Create(sTempFile)))
  32. {
  33. s.SetLevel(); // 压缩级别 0-9
  34. if (sPassWord != "")
  35. {
  36. s.Password = sPassWord; //Zip压缩文件密码
  37. }
  38.  
  39. byte[] buffer = new byte[]; //缓冲区大小
  40.  
  41. foreach (string file in files)
  42. {
  43. if (!string.IsNullOrEmpty(file))
  44. {
  45. if (File.Exists(file))
  46. {
  47. ZipEntry entry = new ZipEntry(Path.GetFileName(file));
  48. entry.DateTime = DateTime.Now;
  49. s.PutNextEntry(entry);
  50.  
  51. using (FileStream fs = File.OpenRead(file))
  52. {
  53. int sourceBytes;
  54. do
  55. {
  56. sourceBytes = fs.Read(buffer, , buffer.Length);
  57. s.Write(buffer, , sourceBytes);
  58. } while (sourceBytes > );
  59. }
  60. }
  61. else
  62. {
  63. //logger.Error("文件:" + file + "不存在。");
  64. }
  65. }
  66. }
  67.  
  68. s.Finish();
  69. s.Close();
  70. }
  71. }
  72. catch (Exception ex)
  73. {
  74. //logger.Error("压缩文件时异常!");
  75. //logger.Error("异常描述:\t" + ex.Message);
  76. //logger.Error("异常方法:\t" + ex.TargetSite);
  77. //logger.Error("异常堆栈:\t" + ex.StackTrace);
  78. }
  79. }
  80.  
  81. /// <summary>
  82. ///
  83. /// </summary>
  84. /// <param name="files">放入ZIP的文件路劲(含文件名)</param>
  85. /// <param name="sTempFile">创建的ZIP文件路劲(含文件名)</param>
  86. /// <param name="sPassWord">ZIP文件密码</param>
  87. /// <param name="folderNames">存放到ZIP中的文件夹名,空代表放在顶级目录</param>
  88. public void CreateZipFileMutilFolder(string[] files, string sTempFile, string sPassWord, string[] folderNames)
  89. {
  90. try
  91. {
  92. using (ZipOutputStream s = new ZipOutputStream(File.Create(sTempFile)))
  93. {
  94. s.SetLevel(); // 压缩级别 0-9
  95. if (sPassWord != "")
  96. {
  97. s.Password = sPassWord; //Zip压缩文件密码
  98. }
  99.  
  100. byte[] buffer = new byte[]; //缓冲区大小
  101.  
  102. int i = ;
  103. foreach (string file in files)
  104. {
  105. if (!string.IsNullOrEmpty(file))
  106. {
  107. if (File.Exists(file))
  108. {
  109. ZipEntry entry = new ZipEntry((string.IsNullOrEmpty(folderNames[i]) ? "" : (folderNames[i] + "\\")) + Path.GetFileName(file));
  110. entry.DateTime = DateTime.Now;
  111. s.PutNextEntry(entry);
  112.  
  113. using (FileStream fs = File.OpenRead(file))
  114. {
  115. int sourceBytes;
  116. do
  117. {
  118. sourceBytes = fs.Read(buffer, , buffer.Length);
  119. s.Write(buffer, , sourceBytes);
  120. } while (sourceBytes > );
  121. }
  122. }
  123. else
  124. {
  125. //logger.Error("文件:" + file + "不存在。");
  126. }
  127. }
  128.  
  129. i++;
  130. }
  131.  
  132. s.Finish();
  133. s.Close();
  134. }
  135. }
  136. catch (Exception ex)
  137. {
  138. //logger.Error("压缩文件时异常!");
  139. //logger.Error("异常描述:\t" + ex.Message);
  140. //logger.Error("异常方法:\t" + ex.TargetSite);
  141. //logger.Error("异常堆栈:\t" + ex.StackTrace);
  142. }
  143. }
  144. }

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

  1. 利用ICSharpCode.SharpZipLib.Zip进行文件压缩

    官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOu ...

  2. C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

    大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, ...

  3. c# ICSharpCode.SharpZipLib.Zip实现文件的压缩

    首先了解ZipOutPutStream和ZipEntry对象 ZipOutPutStream对象 如果要完成一个文件或文件夹的压缩,则要使用ZipOutputStream类.ZipOutputStre ...

  4. ICSharpCode.SharpZipLib工具压缩与解压缩zip文件

    using System; using System.Collections.Generic; using System.IO; using System.Text; using ICSharpCod ...

  5. C#使用ICSharpCode.SharpZipLib.dll压缩多个文件

    首先通过NuGet管理安装ICSharpCode.SharpZipLib.dll 以下是压缩的通用方法: using System; using System.IO; using System.Web ...

  6. 基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

    原文:基于ICSharpCode.SharpZipLib.Zip的压缩解压缩 今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// ...

  7. C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  8. 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩

    使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...

  9. C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类

    最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ...

随机推荐

  1. [转帖]【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别

    https://www.cnblogs.com/sxdcgaq8080/p/7487369.html 其实不同的 openjdk的版本也不一样. atlassian说AdoptOpenJDK我们测试充 ...

  2. 自然语言处理工具HanLP-N最短路径分词

    本篇给大家分享baiziyu 写的HanLP 中的N-最短路径分词.以为下分享的原文,部分地方有稍作修改,内容仅供大家学习交流! 首先说明在HanLP对外提供的接口中没有使用N-最短路径分词器的,作者 ...

  3. myeclipse中jpa的安装以及jpa reverse engining

    myeclipse中jpa的安装以及jpa reverse engining 安装 右击 Configure Facets, Install JPA jpa reverse engining 1.db ...

  4. JMX jconsole 的使用

    JMX 1. JMX简单介绍 JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展.这种机制可以方便的管理正在运行中的Java程序.常用于管理线程, ...

  5. mysql事务、redo日志、undo日志、checkpoint详解

    转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...

  6. java各种jar的下载地址和源码下载地址

    1.jboss http://jbossmarshalling.jboss.org/downloads2.netty https://netty.io/downloads.html3.spring h ...

  7. MySQL性能优化(七):其它优化

    原文:MySQL性能优化(七):其它优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/v ...

  8. 关于redis的几件小事(五)redis保证高并发以及高可用

    如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 redis高并发:主从架构 ...

  9. Vue的nextTick是什么?

    公司做之前项目的时候,遇到了一些比较困惑的问题,后来研究明白了nextTick的用法. 我们先看两种情况: 第一种: export default { data () { return { msg: ...

  10. React 长列表修改时避免全体渲染

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <script ...