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 磁盘 ...
随机推荐
- java8新特性-简介
一.主要内容 :其中最为核心的为lambda 表达式 与 Stream API lambda表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期API ...
- 3、NumPy 数组属性
1.秩.维度 NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions ...
- python 日产经销商
''' ajaxCallSiteInfo: {1C8B2BC6-35E2-460E-A63D-3576F3039D79} ''' import requests import json from db ...
- python写入mysql
import pymysql conn = pymysql.connect(host='192.168.70.129',port=3306,user='root',passwd='123456', ...
- 初涉kafka
前言: 今天终于搭建成功kafka环境,并创建了第一个topic,并生产.消费消息,如下图: 生产: 消费: 心情真的是好激动,大家都说搭建环境其实特别简单,但是我的学习却一直卡在搭建环境上面,不是虚 ...
- 2. ZooKeeper基础
1. ZooKeeper的特性 ZooKeeper的特性主要从会话.数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中需要重点掌握的数据节点与Watcher 1.1 会话 客 ...
- elasticsearch 深入 —— 地理位置
地理位置 我们拿着纸质地图漫步城市的日子一去不返了.得益于智能手机,我们现在总是可以知道 自己所处的准确位置,也预料到网站会使用这些信息.我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范 ...
- jquery+html实现前端的上传图片预览
就是这样的一个功能,点击加号,出现图片选择,然后选择好以后生成预览. input那么丑,UI看不惯,一定要改成加号 我就用了fa的图标,外部套一个bootstrap4中的class:borde ...
- vue,一路走来(14)--短信验证码框的实现(类似支付密码框)
由于项目的扩展,新增了很多功能,今天谈一下短信验证码框的实现. 思路:每个小方框其实就是单独的每一个input标签(叫假input标签),每个长度为1,然后上面再写一个大的input标签(叫真实inp ...
- 二、TortoiseSVN 合并、打分支、合并分支、切换分支
一.合并 点击Edit conflict来编辑冲突: 在合并后的枝干对应栏中编辑后,Save保存后关闭. 二.TortoiseSVN 打分支.合并分支.切换分支 1.SVN打分支 方式一:先检出,再打 ...