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

    一.主要内容 :其中最为核心的为lambda 表达式 与 Stream API lambda表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期API ...

  2. 3、NumPy 数组属性

    1.秩.维度 NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions ...

  3. python 日产经销商

    ''' ajaxCallSiteInfo: {1C8B2BC6-35E2-460E-A63D-3576F3039D79} ''' import requests import json from db ...

  4. python写入mysql

      import pymysql conn = pymysql.connect(host='192.168.70.129',port=3306,user='root',passwd='123456', ...

  5. 初涉kafka

    前言: 今天终于搭建成功kafka环境,并创建了第一个topic,并生产.消费消息,如下图: 生产: 消费: 心情真的是好激动,大家都说搭建环境其实特别简单,但是我的学习却一直卡在搭建环境上面,不是虚 ...

  6. 2. ZooKeeper基础

    1. ZooKeeper的特性 ZooKeeper的特性主要从会话.数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中需要重点掌握的数据节点与Watcher 1.1 会话 客 ...

  7. elasticsearch 深入 —— 地理位置

    地理位置 我们拿着纸质地图漫步城市的日子一去不返了.得益于智能手机,我们现在总是可以知道 自己所处的准确位置,也预料到网站会使用这些信息.我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范 ...

  8. jquery+html实现前端的上传图片预览

        就是这样的一个功能,点击加号,出现图片选择,然后选择好以后生成预览. input那么丑,UI看不惯,一定要改成加号 我就用了fa的图标,外部套一个bootstrap4中的class:borde ...

  9. vue,一路走来(14)--短信验证码框的实现(类似支付密码框)

    由于项目的扩展,新增了很多功能,今天谈一下短信验证码框的实现. 思路:每个小方框其实就是单独的每一个input标签(叫假input标签),每个长度为1,然后上面再写一个大的input标签(叫真实inp ...

  10. 二、TortoiseSVN 合并、打分支、合并分支、切换分支

    一.合并 点击Edit conflict来编辑冲突: 在合并后的枝干对应栏中编辑后,Save保存后关闭. 二.TortoiseSVN 打分支.合并分支.切换分支 1.SVN打分支 方式一:先检出,再打 ...