有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装DLL文件,本文主要介绍DotNetZip压缩方法。

DotNetZip的DLl下载地址:http://download.csdn.net/detail/lilinoscar/8295255

官网下载地址:http://dotnetzip.codeplex.com/

解决DotNetZip压缩中文名称乱码,只需要在实例化时设置编码:System.Text.Encoding.Default

即:ZipFile zip = new ZipFile(System.Text.Encoding.Default)。

解决DotNetZip压缩后的文件有多层目录:zip.AddFile(file,"");

AddFile加上第二个参数即可去掉多层的文件夹。

  1. #region bool SaveFile(string filePath, byte[] bytes) 文件保存,
  2. /// <summary>
  3. ///  文件保存,特别是有些文件放到数据库,可以直接从数据取二进制,然后保存到指定文件夹
  4. /// </summary>
  5. /// <param name="filePath">保存文件地址</param>
  6. /// <param name="bytes">文件二进制</param>
  7. /// <returns></returns>
  8. public static bool SaveFile(string filePath, byte[] bytes)
  9. {
  10. bool result = true;
  11. try
  12. {
  13. using (var fileStream = new FileStream(filePath, FileMode.Create))
  14. {
  15. fileStream.Write(bytes, 0, bytes.Length);
  16. }
  17. }
  18. catch (Exception)
  19. {
  20. result = false;
  21. }
  22. return result;
  23. }
  24. #endregion
  25. #region 判断文件夹是否存在
  26. /// <summary>
  27. /// 判断文件夹是否存在
  28. /// </summary>
  29. /// <param name="path">文件夹地址</param>
  30. /// <returns></returns>
  31. public static bool directoryExist(string path)
  32. {
  33. if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
  34. {
  35. return true;
  36. }
  37. return false;
  38. }
  39. #endregion
  40. #region 创建文件夹
  41. /// <summary>
  42. /// 创建文件夹
  43. /// </summary>
  44. /// <param name="path">文件地址</param>
  45. /// <returns></returns>
  46. public static bool directoryAdd(string path)
  47. {
  48. if (!string.IsNullOrEmpty(path) && !Directory.Exists(path))
  49. {
  50. Directory.CreateDirectory(path); //新建文件夹
  51. return true;
  52. }
  53. return false;
  54. }
  55. #endregion
  56. #region 获取压缩后的文件路径
  57. /// <summary>
  58. /// 获取压缩后的文件路径
  59. /// </summary>
  60. /// <param name="dirPath">压缩的文件路径</param>
  61. /// <param name="filesPath">多个文件路径</param>
  62. /// <returns></returns>
  63. public static string GetCompressPath(string dirPath, List<string> filesPath)
  64. {
  65. var zipPath = "";//返回压缩后的文件路径
  66. using (ZipFile zip = new ZipFile(System.Text.Encoding.Default)) //System.Text.Encoding.Default设置中文附件名称乱码,不设置会出现乱码
  67. {
  68. foreach (var file in filesPath)
  69. {
  70. zip.AddFile(file,"");
  71. //第二个参数为空,说明压缩的文件不会存在多层文件夹。比如C:\test\a\b\c.doc 压缩后解压文件会出现c.doc
  72. //如果改成zip.AddFile(file);则会出现多层文件夹压缩,比如C:\test\a\b\c.doc 压缩后解压文件会出现test\a\b\c.doc
  73. }
  74. zipPath = string.Format("{0}\\{1}.zip", dirPath, DateTime.Now.ToString("yyyyMMddHHmmss"));
  75. zip.Save(zipPath);
  76. }
  77. return zipPath;
  78. }
  79. #endregion

调用:

    1. List<string> filesPath = new List<string>();
    2. filesPath.Add(“C:/test/a.doc”);
    3. filesPath.Add(“C:/test/b.doc”);
    4. //filesPath.Add(Server.MapPath("~/text/Files/c.doc"));//可以设置添加虚拟路径
    5. var dirPath="Server.MapPath("~/compress/")";
    6. var filePath=GetCompressPath(dirPath,filesPath);//返回压缩的文件

C# DotNetZip压缩单、多文件以及文件夹的更多相关文章

  1. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  2. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  3. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  4. 压缩文本、字节或者文件的压缩辅助类-GZipHelper

    下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间:System.IO.Compression下的GZipStream ...

  5. 压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏

    压缩文本.字节或者文件的压缩辅助类-GZipHelper 欢迎收藏 下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间 ...

  6. 解决:Angular-cli:执行ng-build --prod后,dist文件里无js文件、文件未压缩等问题

    Angular2.0于2016年9月上线,我于9月入坑. 入坑以来,一直让我很困惑的问题 1.angular-cli是个什么鬼东西? 2.为什么我们自己的资源文件还没写什么,就有起码50多个js文件加 ...

  7. java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

    一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry  ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...

  8. 单目录下多文件 makefile编写

    makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...

  9. bat脚本:自动压缩n天前的文件【转载】

    原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html     磁盘 ...

随机推荐

  1. 《JAVA设计模式》之访问者模式(Visitor)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...

  2. python学习第二十八天函数局部变量的用法

    函数局部变量是在函数里面的变量,只能在函数内部使用,如果函数没有找对应变量,函数将去函数外部找对应变量,局部变量优先级大于外部变量,详细说明一下 1,局部变量已经定义值 name='zhan san' ...

  3. weblogic启动脚本01

    DATE=`date +%Y%m%d%H%M%S` user=`whoami` logDir=/app/logs/sguap_admin #启动日志存放路径sguap是例子系统简称# logDestd ...

  4. Linux系统基于fork()新进程的创建

    作者:严哲璟 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 fork属于系 ...

  5. Python3.5-20190501-廖老师的

    python是一门解释型\脚本语言(和js特别像,如果同时学习js和python完全搅浑了.) 在运行py时候是一句一句翻译成cpu识别的机器码,所以速度比较慢.而C程序是运行前直接编译成CPU能执行 ...

  6. spark数据分析导论

    1.spark的定义 spark是一个用来实现快速而通用的集群计算平台,高效的支持更多计算模式,包括交互式查询和流处理. 主要特点就是能够在内存中进行计算,即使在磁盘上进行计算依然比mapreduce ...

  7. null,blank,default

    null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空. blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面 ...

  8. Bootstrap的本地引入

    今天用前端框架时选择了Bootstrap,然后东西都下好了本地就是引入不进去. 查了一下发现必须jquery要在BootStrap之前引入,然后我更改了引入顺序,发现还是不行 <script s ...

  9. 数据流:DataOutputStream与DataInputStream的使用

    看这两个类的名字就不难猜测出它们的类关系图. DataOutputStream: 主要是一些writeXxx()操作,写出, 相当于序列化 DataInputStream: 主要是一些readXxx( ...

  10. git私立的代码库邀请合作者步骤

    第一步,点击setting,如下图: 第二步输入对方的用户名,点击添加. 第三步拷贝链接给对方,等待对方访问加入. 对方访问后可以看到: 加入就可以了 然后对方可以看到: