DotNetZip实现带密码压缩

使用DotNetZip创建带密码保护的压缩文件
本文介绍了DotNetZip库如何用于在.NET环境中创建、解压缩zip文件,特别是其设置密码保护的功能。通过提供的代码示例,展示了如何在VB或C#中实现压缩文件和文件夹,并过滤特定文件后缀。此外,还提到了其他类似库如SharpZipLib和SevenZipSharp,但强调DotNetZip已能满足大部分日常需求。

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

压缩:

/// <summary>
/// 压缩文件/文件夹
/// </summary>
/// <param name="filePath">需要压缩的文件/文件夹路径</param>
/// <param name="zipPath">压缩文件路径(zip后缀)</param>
/// <param name="password">密码</param>
/// <param name="filterExtenList">需要过滤的文件后缀名</param>
public static void CompressionFile(string filePath, string zipPath, string password = "", List<string> 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;
 }
}

/// <summary>
/// 添加文件夹
/// </summary>
/// <param name="zip">ZipFile对象</param>
/// <param name="dirPath">需要压缩的文件夹路径</param>
/// <param name="rootPath">根目录路径</param>
/// <param name="filterExtenList">需要过滤的文件后缀名</param>
public static void AddDirectory(ZipFile zip, string dirPath, string rootPath, List<string> 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);
 }
}

总结

相似的插件还有SharpZipLib(支持更多的压缩格式)、SevenZipSharp(专注处理7z格式压缩文件)等,它们也都有各自的优缺点。但总的来说,上面的组件已经满足日常工作中的大部分需求,遇到相同问题的朋友可以参考下~

参考:

最好的.NET开源免费ZIP库DotNetZip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值