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

最新文章

  1. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
  2. c# WebBrower 与 HttpRequest配合 抓取数据
  3. 实验一 操作系统模仿cmd
  4. Code First 约定
  5. 【翻译】什么是 eCPM &amp; RPM 与其计算公式
  6. python 获取 mac 地址 的代码
  7. vs2013 使用vs调试器,发现调试器显示的数据错误。查看内存,发现内存是正确的。
  8. 依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)
  9. 正确使用Core Data多线程的3种方式
  10. MYSQL数据库引擎区别详解
  11. asp .net连接打开数据库初步
  12. 【转】STM32 FSMC总线深入研究
  13. 2017CCPC秦皇岛 C题Crusaders Quest&amp;&amp;ZOJ3983【模拟+STL】
  14. linux sysfs文件系统
  15. CSS3 水平翻转
  16. STL_头文件
  17. 维护一个旧程序 linq2sql,出现row not found or changed的异常
  18. [Unity插件]Lua行为树(二):树结构
  19. iOS 数据持久化-- FMDB
  20. delphi IOS 简单类型转换

热门文章

  1. PHP开发环境搭建及开发工具
  2. web开发jsp页面遇到的一系列问题
  3. Codeforces 1166E(思维)
  4. 小B的询问(题解)(莫队)
  5. luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)
  6. vmware linux root密码破解
  7. P4132 [BJOI2012]算不出的等式
  8. sqlite查询语句
  9. JSON对象与JavaScript对象的区别
  10. JS变量连续赋值