使用DOTNETZIP过滤并压缩相对目录
使用DOTNETZip过滤并压缩相对目录业务要求:
压缩某个文件夹及其子目录压缩时只压缩指定的文件类型,如cshtml压缩后保持相对目录
找了很久,没有直接的DEMO,最后尝试通过以下代码完成
示例演示了只压缩cshtml和js,同时跳过debugjs和bin目录
/// <summary> /// /// </summary> /// <param name="args"> /// <example> /// <code> /// args = new string[] { /// "ZipFile", /// @"Path=D:\kljob\CardLan\CardLan.Web.OneCard", /// "Filter=*.cshtml;*.js", /// "TargetFile=d:\\temp\\zip.zip" , /// "ZipType=DotNet", /// "SkipPath=DebugJS;bin" /// }; /// /// </code> /// </example> /// </param> /// <returns></returns> publicstaticint Zip(string[] args) { string path = Helper.ArgHelper.FindArg(args, "Path"); string targetFile = Helper.ArgHelper.FindArg(args, "TargetFile"); string zipType = Helper.ArgHelper.FindArg(args, "ZipType"); string filter = Helper.ArgHelper.FindArg(args, "Filter"); string skipPath = Helper.ArgHelper.FindArg(args, "SkipPath"); if (!System.IO.Directory.Exists(path)) thrownew System.IO.DirectoryNotFoundException(path); switch (zipType) { case "DotNet": default: using (ZipFile zip = new ZipFile(System.Text.Encoding.UTF8))//设置编码,解决压缩文件时中文乱码 { StringBuilder sb = new StringBuilder(""); foreach (var item in skipPath.Split(';')) { if (!string.IsNullOrEmpty(item)) sb.AppendFormat("name!={1}\\{0}\\* and ", item,path); } zip.AddSelectedFiles(sb.ToString() + " (name=" + string.Join(" or name=", filter.Split(';')) + ")", path, "", true); zip.Save(targetFile); } return 0; } }
参考:
http://dotnetzip.herobo.com/DNZHelp/html/547e4c24-4683-96df-036e-19bc34ba27e4.htm
http://dotnetzip.herobo.com/DNZHelp/html/b5ca1211-94be-6039-cd07-61d3821d9c3d.htm