C# 使用原生 System.IO.Compression 实现 zip 的压缩与解压

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作,
我们采用的是 微软官方的实现,所以也不需要安装第三方的组件包。
使用的时候记得 using System.IO.Compression;
  1. /// <summary>
  2. /// 将指定目录压缩为Zip文件
  3. /// </summary>
  4. /// <param name="folderPath">文件夹地址 D:/1/ </param>
  5. /// <param name="zipPath">zip地址 D:/1.zip </param>
  6. public static void CompressDirectoryZip(string folderPath, string zipPath)
  7. {
  8.     DirectoryInfo directoryInfo = new(zipPath);
  9.     if (directoryInfo.Parent != null)
  10.     {
  11.         directoryInfo = directoryInfo.Parent;
  12.     }
  13.     if (!directoryInfo.Exists)
  14.     {
  15.         directoryInfo.Create();
  16.     }
  17.     ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Optimal, false);
  18. }
复制代码
其中 CompressionLevel 是个枚举,支持下面四种类型
枚举值注解Optimal0压缩操作应以最佳方式平衡压缩速度和输出大小。Fastest1即使结果文件未可选择性地压缩,压缩操作也应尽快完成。NoCompression2该文件不应执行压缩。SmallestSize3压缩操作应尽可能小地创建输出,即使该操作需要更长的时间才能完成。我方法这里直接固定了采用 CompressionLevel.Optimal,大家可以根据个人需求自行调整。
  1. /// <summary>
  2. /// 将指定文件压缩为Zip文件
  3. /// </summary>
  4. /// <param name="filePath">文件地址 D:/1.txt </param>
  5. /// <param name="zipPath">zip地址 D:/1.zip </param>
  6. public static void CompressFileZip(string filePath, string zipPath)
  7. {
  8.     FileInfo fileInfo = new FileInfo(filePath);
  9.     string dirPath = fileInfo.DirectoryName?.Replace("\", "/") + "/";
  10.     string tempPath = dirPath + Guid.NewGuid() + "_temp/";
  11.     if (!Directory.Exists(tempPath))
  12.     {
  13.         Directory.CreateDirectory(tempPath);
  14.     }
  15.     fileInfo.CopyTo(tempPath + fileInfo.Name);
  16.     CompressDirectoryZip(tempPath, zipPath);
  17.     DirectoryInfo directory = new(path);
  18.     if (directory.Exists)
  19.     {
  20.         //将文件夹属性设置为普通,如:只读文件夹设置为普通
  21.         directory.Attributes = FileAttributes.Normal;
  22.         directory.Delete(true);
  23.     }
  24. }
复制代码
压缩单个文件的逻辑其实就是先将我们要压缩的文件复制到一个临时目录,然后对临时目录执行了压缩动作,压缩完成之后又删除了临时目录。
  1. /// <summary>
  2. /// 解压Zip文件到指定目录
  3. /// </summary>
  4. /// <param name="zipPath">zip地址 D:/1.zip</param>
  5. /// <param name="folderPath">文件夹地址 D:/1/</param>
  6. public static void DecompressZip(string zipPath, string folderPath)
  7. {
  8.     DirectoryInfo directoryInfo = new(folderPath);
  9.     if (!directoryInfo.Exists)
  10.     {
  11.         directoryInfo.Create();
  12.     }
  13.     ZipFile.ExtractToDirectory(zipPath, folderPath);
  14. }
复制代码
至此 C# 使用原生 System.IO.Compression 实现 zip 的压缩与解压 就讲解完了,有任何不明白的,可以在文章下面评论或者私信我,欢迎大家积极的讨论交流,有兴趣的朋友可以关注我目前在维护的一个 .NET 基础框架项目,项目地址如下
https://github.com/berkerdong/NetEngine.git
https://gitee.com/berkerdong/NetEngine.git

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表