网站建设资讯

NEWS

网站建设资讯

详解C#压缩、解压文件夹/文件(带密码)-创新互联

前言

成都创新互联公司是专业的金沙网站建设公司,金沙接单;提供网站设计制作、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行金沙网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

今天梳理一下项目中用到的压缩、解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件。今天就好好整理记录下,别下次遇到需求又重头开始了。

DotNetZip

DotNetZip是一个开源的免费类库,主要提供了快速操作zip文件的工具集,VB、C#任何.Net语言都可以通过它创建、解压缩zip文件。我使用该类库最主要的目的还是因为它可以创建带密码保护的压缩文件。

只有设置了zip.Password = "password"之后,被压缩的文件才会有密码保护

/// 
/// 压缩文件/文件夹
/// 
/// 需要压缩的文件/文件夹路径
/// 压缩文件路径(zip后缀)
/// 密码
/// 需要过滤的文件后缀名
public static void CompressionFile(string filePath, string zipPath, string password = "", List filterExtenList = null)
{
 try
 {
  using (ZipFile zip = new ZipFile(Encoding.UTF8))
  {
   if (!string.IsNullOrWhiteSpace(password))
   {
    zip.Password = password;
   }
   if (Directory.Exists(filePath))
   {
    if (filterExtenList == null)
     zip.AddDirectory(filePath);
    else
     AddDirectory(zip, filePath, filePath, filterExtenList);
   }
   else if (File.Exists(filePath))
   {
    zip.AddFile(filePath,"");
   }
   zip.Save(zipPath);
  }
 }
 catch (Exception ex)
 {
  throw ex;
 }
}

/// 
/// 添加文件夹
/// 
/// ZipFile对象
/// 需要压缩的文件夹路径
/// 根目录路径
/// 需要过滤的文件后缀名
public static void AddDirectory(ZipFile zip, string dirPath, string rootPath, List filterExtenList)
{
 var files = Directory.GetFiles(dirPath);
 for (int i = 0; i < files.Length; i++)
 {
  //如果Contains不支持第二个参数,就用.ToLower()
  if (filterExtenList == null || (filterExtenList != null && !filterExtenList.Any(d => Path.GetExtension(files[i]).Contains(d, StringComparison.OrdinalIgnoreCase))))
  {
   //获取相对路径作为zip文件中目录路径
   zip.AddFile(files[i], Path.GetRelativePath(rootPath, dirPath));
   
  //如果没有Path.GetRelativePath方法,可以用下面代码替换
   //string relativePath = Path.GetFullPath(dirPath).Replace(Path.GetFullPath(rootPath), "");
   //zip.AddFile(files[i], relativePath);
  }
 }
 var dirs = Directory.GetDirectories(dirPath);
 for (int i = 0; i < dirs.Length; i++)
 {
  AddDirectory(zip, dirs[i], rootPath, filterExtenList);
 }
}


文章名称:详解C#压缩、解压文件夹/文件(带密码)-创新互联
当前网址:http://cdweb.net/article/hpeed.html