Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1466|回复: 0

[默认分类] C# DotNetZip压缩单、多文件以及文件夹

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-26 11:46:50 | 显示全部楼层 |阅读模式


    有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装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.                  
    6.                  var dirPath="Server.MapPath("~/compress/")";
    7.                  var filePath=GetCompressPath(dirPath,filesPath);//返回压缩的文件
    复制代码
















    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-29 09:20 , Processed in 0.555509 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表