有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装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. MySQL-第八篇MySQL内置函数

    1.根据函数对多行数据的处理方式,可以分为: 1>单行函数:对每行输入值进行单独计算,每行得到一个计算结果返回给用户.  2>多行函数:聚集函数.分组函数,主要用于完成一些统计功能.对多行 ...

  2. 转 router-view 的理解

    主要是构建 SPA (单页应用) 时,方便渲染你指定路由对应的组件.你可以 router-view 当做是一个容器,它渲染的组件是你使用 vue-router 指定的.比如: 视图层: <div ...

  3. ArrayList与List<T>的区别

    ArrayList alist = new ArrayList(); //ArrayList(object value),所以ArrayList可以存储任何类型,如果存储值类型的话会进行装箱操作,在操 ...

  4. C# PDF文件转图片

    参考:https://blog.csdn.net/lai124793549/article/details/53392281 https://www.cnblogs.com/xiewei123/p/1 ...

  5. C#面试 笔试题 三

    1.传入某个属性的set方法的隐含参数的名称是什么? value,它的类型和属性所声名的类型相同.   2.C#支持多重继承么? 类之间不支持,接口之间支持.类对接口叫做实现,不叫继承. 3.C#中所 ...

  6. YARN的伪分布式安装

    前提:安装完HDFS以后 1.修改mapred-site.xml 这个文件初始时是没有的,有的是模板文件,mapred-site.xml.template 所以需要拷贝一份,并重命名为mapred-s ...

  7. 使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?

    使用typeof首先要明白 typeof 可以检测什么. typeof 主要用于检测基本数据类型.typeof尽量不要用来检测复杂数据类型. typeof 检测null 和 数组 的时候 结果也是ob ...

  8. SIP UserAgent (B2BUA client)——libosip2 libeXosip2

    1. libosip2 libeXosip2 http://www.antisip.com/download/exosip2/ Features:--------eXosip2 has support ...

  9. rabbitmq windows安装 及 centos安装

     windows安装如下: 安装方法如下网址: https://baijiahao.baidu.com/s?id=1605656085633071281&wfr=spider&for= ...

  10. Git--04 Github使用

    目录 Github使用 1.注册用户 2.配置ssh-key 3.创建项目 4.克隆项目到本地 5.推送新代码到github Github使用 Github顾名思义是一个Git版本库的托管服务,是目前 ...