业务要求:

  1. 压缩某个文件夹及其子目录
  2. 压缩时只压缩指定的文件类型,如cshtml
  3. 压缩后保持相对目录

 

找了很久,没有直接的DEMO,最后尝试通过以下代码完成

示例演示了只压缩cshtml和js,同时跳过debugjs和bin目录

 

 

  1. /// <summary>
  2.        ///
  3.        /// </summary>
  4.        /// <param name="args">
  5.        /// <example>
  6.        /// <code>
  7.        /// args = new string[] {
  8.        /// "ZipFile",
  9.        /// @"Path=D:\kljob\CardLan\CardLan.Web.OneCard",
  10.        /// "Filter=*.cshtml;*.js",
  11.        /// "TargetFile=d:\\temp\\zip.zip" ,
  12.        /// "ZipType=DotNet",
  13.        /// "SkipPath=DebugJS;bin"
  14.        /// };
  15.        ///
  16.        /// </code>
  17.        /// </example>
  18.        /// </param>
  19.        /// <returns></returns>
  20.        public
    static
    int Zip(string[] args)
  21.        {
  22.            string path = Helper.ArgHelper.FindArg(args, "Path");
  23.            string targetFile = Helper.ArgHelper.FindArg(args, "TargetFile");
  24.            string zipType = Helper.ArgHelper.FindArg(args, "ZipType");
  25.            string filter = Helper.ArgHelper.FindArg(args, "Filter");
  26.            string skipPath = Helper.ArgHelper.FindArg(args, "SkipPath");
  27.  
  28.  
  29.            if (!System.IO.Directory.Exists(path))
  30.                throw
    new System.IO.DirectoryNotFoundException(path);
  31.  
  32.  
  33.            switch (zipType)
  34.            {
  35.                case "DotNet":
  36.                default:
  37.                    using (ZipFile zip = new ZipFile(System.Text.Encoding.UTF8))//设置编码,解决压缩文件时中文乱码
  38.                    {
  39.                        StringBuilder sb = new StringBuilder("");
  40.                        foreach (var item in skipPath.Split(';'))
  41.                        {
  42.                            if (!string.IsNullOrEmpty(item))
  43.                                sb.AppendFormat("name!={1}\\{0}\\* and ", item,path);
  44.                        }
  45.                        zip.AddSelectedFiles(sb.ToString() + " (name=" + string.Join(" or name=", filter.Split(';')) + ")", path, "", true);
  46.                        zip.Save(targetFile);
  47.                    }
  48.                    return 0;
  49.            }
  50.        }

 

参考:

 

http://dotnetzip.herobo.com/DNZHelp/html/547e4c24-4683-96df-036e-19bc34ba27e4.htm

http://dotnetzip.herobo.com/DNZHelp/html/b5ca1211-94be-6039-cd07-61d3821d9c3d.htm

 

 

使用DOTNETZIP过滤并压缩相对目录的更多相关文章

  1. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  2. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...

  3. C# .NET 使用第三方类库DotNetZip解压/压缩Zip rar文件

    DotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...

  4. C# .NET 使用第三方类库DotNetZip解压/压缩Zip文件

    dotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...

  5. 使用 ICharpCode.SharpZipLib 压缩指定目录结构

    今天做项目中遇见一个压缩问题,我的目录结构是树形菜单,文件在服务器存储是平面存储,没有目录结构,所以在下载指定目录的时候要构建目录结构,如下: 当我右键点击下载b目录文件夹的时候要Download   ...

  6. 在Node.js中在保持目录结构的情况下压缩指定目录

    最近在做一个文件升级的功能,需要从下载服务器中指定目录下的文件.在学习了zlib后发现这个模块达不到这个功能 在查找资料后发现后发现 archiver 模块很好用,不过我也发现大部分中文资料没有如果查 ...

  7. shell 批量压缩指定目录及子目录内图片的方法

    用户上传的图片,一般都没有经过压缩,造成空间浪费.因此需要编写一个程序,查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理. 查看目录文件大小 du -h --max- ...

  8. LZMA C# SDK 结合 UPK 打包压缩 多目录 Unity3d实例

    上篇  LZMA C# SDK 子线程压缩与解压缩 Unity3d实例  讲了怎样使用 LZMA C# SDK 来对文件进行压缩与解压,当中提到 对于多目录能够先打包成 UPK 然后再 LZMA 压缩 ...

  9. 使用filter过滤GZIP压缩(二)

    在代码之前,讲一下用filter实现GZIP压缩的原理: 因为GZIP压缩之后,是从服务器端传输到浏览器端,从servlet到浏览器(从jsp到浏览器),其实是response带回内容,所以我们要在f ...

随机推荐

  1. 应用程序框架实战二十九:Util Demo介绍

    上文介绍了我选择EasyUi作为前端框架的原因,并发放了最新Demo.本文将对这个Demo进行一些介绍,以方便你能够顺利运行起来. 这个Demo运行起来以后,是EasyUi的一个简单CRUD操作,数据 ...

  2. 3、Redis 基础

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...

  3. ASP.NET MVC 6 一些不晓得的写法

    今天在看 Scott Guthrie 的一篇博文<Introducing ASP.NET 5>,在 MVC 6 中,发现有些之前不晓得的写法,这边简单记录下,算是对自己知识的补充,有些我并 ...

  4. 小菜学习设计模式(二)—单例(Singleton)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

  5. 使用Spire组件抛出异常The type initializer for 'spr857' threw an exception

    使用Spire组件抛出异常The type initializer for 'spr857' threw an exception 我使用免费的Spire.Xls组件尝试去转换Excel文档到PDF文 ...

  6. 利用Eclipse使用Java OpenCV(Using OpenCV Java with Eclipse)

    最近在上计算机视觉这门课程用到了OpenCV,于是找到了"Using OpenCV Java with Eclipse"这篇博文,是英文的,我将它翻译如下与大家分享 正文: 从2. ...

  7. ZOJ Problem Set - 1045 HangOver

    #include <stdio.h> int main() { float c; int i; while(scanf("%f",&c)!=EOF&&a ...

  8. Oracle丢失重做日志的几种场景恢复

    实验环境:RHEL6.4 + Oracle 11.2.0.4 一.丢失重做日志组中成员 1.1 故障模拟 1.2 处理方法 1.3 实际处理过程 二.丢失重做日志组 2.1 丢失INACTIVE重做日 ...

  9. Oracle段收缩功能

    1.了解段收缩 2.自动执行Segment Advisor 3.收缩段 1. 了解段收缩 应用场景:如果对一张表频繁执行插入.更新和删除操作,时间长了可能会出现大量碎片,Oracle针对这种场景推出段 ...

  10. iOS-LaunchImage启动页

    一. 目标: 设置一个漂亮的启动页. 二.步骤 1. 先创建LaunchImage 2. 进一步设置需要适配的启动页机型 3. 设置完成的效果 4.往里面拖图片,如图是适配的图片的配置 5. 在项目中 ...