有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装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) 文件保存,
-
-
-
-
-
-
- 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 判断文件夹是否存在
-
-
-
-
-
- public static bool directoryExist(string path)
- {
- if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
- {
- return true;
- }
- return false;
- }
- #endregion
-
- #region 创建文件夹
-
-
-
-
-
- public static bool directoryAdd(string path)
- {
- if (!string.IsNullOrEmpty(path) && !Directory.Exists(path))
- {
- Directory.CreateDirectory(path);
- return true;
- }
- return false;
- }
- #endregion
-
- #region 获取压缩后的文件路径
-
-
-
-
-
-
- public static string GetCompressPath(string dirPath, List<string> filesPath)
- {
- var zipPath = "";
- using (ZipFile zip = new ZipFile(System.Text.Encoding.Default))
- {
- foreach (var file in filesPath)
- {
- zip.AddFile(file,"");
- }
- 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”);
-
- var dirPath="Server.MapPath("~/compress/")";
- var filePath=GetCompressPath(dirPath,filesPath);
-
|
请发表评论