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);//返回压缩的文件
时间: 2024-10-29 03:34:15

C# DotNetZip压缩单、多文件以及文件夹的相关文章

【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件http://www.cnblogs.com/wohexiaocai/p/5469253.html,实际项目中也会用到rar压缩,所以总结了一下代码,之后简单的几个函数. 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集和总结出好用的框架和通

PHP-表单的读写,File文件的操作等---ShinePans

实践一: 表单的操作: wlcome_page.php <html> <body> <?php include("menu1.php"); ?> <form action="welcome_info.php" method="post"> <br/> Name         :<input type="text" name="name"/&

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 &amp;&amp; Linux下的ZipArchive配置开启压缩

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipArchive;//新建一个ZipArchive的对象 /* 通过ZipArchive的对象处理zip文件 $zip->open这个方法的参数表示处理的

单目录下多文件 makefile编写

makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东西,记录下来,以便后面查阅: 这篇blog要分享的是在单目录下多文件的makefile编写,首先说明当前目录下有多少文件:fun.h   fun.c  main.c  makefile:其中*.c 文件都要依赖 *.h文件: 首先常规编译: 预处理期:gcc  -E  -o fun.i  fun.c

bat脚本:自动压缩n天前的文件【转载】

原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html 磁盘空间有限,又不能删除,只能定期对旧文件进行压缩以尽量节省空间.在windows2003上做这件事情比较简单,在之前的平台上就麻烦些.主要是查找n天前的文件的实现有区别.在2003及以后的windows系统版本,都有一个forfiles的命令来查找文件,之前的只能通过bat命令来实现这个功能了.这两种方法的详

使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username},

使用r.js压缩整个项目的JavaScript文件

r.js是RequireJS的一部分(optimizer).它依赖于UglifyJS,而UglifyJS基于nodejs.r.js多数时候配合模块化(AMD)写法进行合并,压缩.如果你的代码不采用AMD方式,也可以用它来压缩.这篇讨论的是当不采用AMD方式组织代码时压缩整个项目的js文件. 假设项目中所有的js文件都在scripts目录中 项目中有css,html,scripts三个目录,分别对应css,html和js文件.下载的r.js与myapp平行放置. scripts-build目录放置

java压缩 GZIP进行简单压缩,ZIP进行多文件保存

java压缩  GZIP进行简单压缩,ZIP进行多文件保存 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > package org.rui.io.compress; import java.io.BufferedOutputStream; import java.io

压缩文本、字节或者文件的压缩辅助类

using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.IO; using Microsoft.Win32; using System.IO.Compression; using System.Runtime.Serialization.Formatters.Binary; namespace AIMSCommon { /// <summar