C# DotNetZip压缩单、多文件以及文件夹
有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装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加上第二个参数即可去掉多层的文件夹。
- #region bool SaveFile(string filePath, byte[] bytes) 文件保存,
- /// <summary>
- /// 文件保存,特别是有些文件放到数据库,可以直接从数据取二进制,然后保存到指定文件夹
- /// </summary>
- /// <param name="filePath">保存文件地址</param>
- /// <param name="bytes">文件二进制</param>
- /// <returns></returns>
- public static bool SaveFile(string filePath, byte[] bytes)
- {
- bool result = true;
- try
- {
- using (var fileStream = new FileStream(filePath, FileMode.Create))
- {
- fileStream.Write(bytes, 0, bytes.Length);
- }
- }
- catch (Exception)
- {
- result = false;
- }
- return result;
- }
- #endregion
- #region 判断文件夹是否存在
- /// <summary>
- /// 判断文件夹是否存在
- /// </summary>
- /// <param name="path">文件夹地址</param>
- /// <returns></returns>
- public static bool directoryExist(string path)
- {
- if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
- {
- return true;
- }
- return false;
- }
- #endregion
- #region 创建文件夹
- /// <summary>
- /// 创建文件夹
- /// </summary>
- /// <param name="path">文件地址</param>
- /// <returns></returns>
- public static bool directoryAdd(string path)
- {
- if (!string.IsNullOrEmpty(path) && !Directory.Exists(path))
- {
- Directory.CreateDirectory(path); //新建文件夹
- return true;
- }
- return false;
- }
- #endregion
- #region 获取压缩后的文件路径
- /// <summary>
- /// 获取压缩后的文件路径
- /// </summary>
- /// <param name="dirPath">压缩的文件路径</param>
- /// <param name="filesPath">多个文件路径</param>
- /// <returns></returns>
- public static string GetCompressPath(string dirPath, List<string> filesPath)
- {
- var zipPath = "";//返回压缩后的文件路径
- using (ZipFile zip = new ZipFile(System.Text.Encoding.Default)) //System.Text.Encoding.Default设置中文附件名称乱码,不设置会出现乱码
- {
- foreach (var file in filesPath)
- {
- zip.AddFile(file,"");
- //第二个参数为空,说明压缩的文件不会存在多层文件夹。比如C:\test\a\b\c.doc 压缩后解压文件会出现c.doc
- //如果改成zip.AddFile(file);则会出现多层文件夹压缩,比如C:\test\a\b\c.doc 压缩后解压文件会出现test\a\b\c.doc
- }
- zipPath = string.Format("{0}\\{1}.zip", dirPath, DateTime.Now.ToString("yyyyMMddHHmmss"));
- zip.Save(zipPath);
- }
- return zipPath;
- }
- #endregion
调用:
- List<string> filesPath = new List<string>();
- filesPath.Add(“C:/test/a.doc”);
- filesPath.Add(“C:/test/b.doc”);
- //filesPath.Add(Server.MapPath("~/text/Files/c.doc"));//可以设置添加虚拟路径
- var dirPath="Server.MapPath("~/compress/")";
- var filePath=GetCompressPath(dirPath,filesPath);//返回压缩的文件
C# DotNetZip压缩单、多文件以及文件夹的更多相关文章
- 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)
1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...
- 压缩文本、字节或者文件的压缩辅助类-GZipHelper
下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间:System.IO.Compression下的GZipStream ...
- 压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏
压缩文本.字节或者文件的压缩辅助类-GZipHelper 欢迎收藏 下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间 ...
- 解决:Angular-cli:执行ng-build --prod后,dist文件里无js文件、文件未压缩等问题
Angular2.0于2016年9月上线,我于9月入坑. 入坑以来,一直让我很困惑的问题 1.angular-cli是个什么鬼东西? 2.为什么我们自己的资源文件还没写什么,就有起码50多个js文件加 ...
- java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...
- 单目录下多文件 makefile编写
makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...
- bat脚本:自动压缩n天前的文件【转载】
原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html 磁盘 ...
随机推荐
- MySQL-第八篇MySQL内置函数
1.根据函数对多行数据的处理方式,可以分为: 1>单行函数:对每行输入值进行单独计算,每行得到一个计算结果返回给用户. 2>多行函数:聚集函数.分组函数,主要用于完成一些统计功能.对多行 ...
- 转 router-view 的理解
主要是构建 SPA (单页应用) 时,方便渲染你指定路由对应的组件.你可以 router-view 当做是一个容器,它渲染的组件是你使用 vue-router 指定的.比如: 视图层: <div ...
- ArrayList与List<T>的区别
ArrayList alist = new ArrayList(); //ArrayList(object value),所以ArrayList可以存储任何类型,如果存储值类型的话会进行装箱操作,在操 ...
- C# PDF文件转图片
参考:https://blog.csdn.net/lai124793549/article/details/53392281 https://www.cnblogs.com/xiewei123/p/1 ...
- C#面试 笔试题 三
1.传入某个属性的set方法的隐含参数的名称是什么? value,它的类型和属性所声名的类型相同. 2.C#支持多重继承么? 类之间不支持,接口之间支持.类对接口叫做实现,不叫继承. 3.C#中所 ...
- YARN的伪分布式安装
前提:安装完HDFS以后 1.修改mapred-site.xml 这个文件初始时是没有的,有的是模板文件,mapred-site.xml.template 所以需要拷贝一份,并重命名为mapred-s ...
- 使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?
使用typeof首先要明白 typeof 可以检测什么. typeof 主要用于检测基本数据类型.typeof尽量不要用来检测复杂数据类型. typeof 检测null 和 数组 的时候 结果也是ob ...
- SIP UserAgent (B2BUA client)——libosip2 libeXosip2
1. libosip2 libeXosip2 http://www.antisip.com/download/exosip2/ Features:--------eXosip2 has support ...
- rabbitmq windows安装 及 centos安装
windows安装如下: 安装方法如下网址: https://baijiahao.baidu.com/s?id=1605656085633071281&wfr=spider&for= ...
- Git--04 Github使用
目录 Github使用 1.注册用户 2.配置ssh-key 3.创建项目 4.克隆项目到本地 5.推送新代码到github Github使用 Github顾名思义是一个Git版本库的托管服务,是目前 ...