参考文档:
https://learn.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-8.0&redirectedfrom=MSDN
https://blog.csdn.net/lvmingzhou/article/details/134161441
操作 zip 存档及其文件的方法分布在三个类中: ZipFile、 ZipArchive和 ZipArchiveEntry。
从目录Create zip 存档 | ZipFile.CreateFromDirectory |
将 zip 存档的内容提取到目录 | ZipFile.ExtractToDirectory |
将新文件添加到现有 zip 存档 | ZipArchive.CreateEntry |
检索 zip 存档中的文件 | ZipArchive.GetEntry |
检索 zip 存档中的所有文件 | ZipArchive.Entries |
打开 zip 存档中包含的单个文件的流 | ZipArchiveEntry.Open |
从 zip 存档中删除文件 | ZipArchiveEntry.Delete |
示例:
using System; using System.IO.Compression; class Program { static void Main(string[] args) { string startPath = @".\start"; string zipPath = @".\result.zip"; string extractPath = @".\extract"; ZipFile.CreateFromDirectory(startPath, zipPath); ZipFile.ExtractToDirectory(zipPath, extractPath); } }
方法
自己的例子:
public class ZipHelper { /// <summary> /// ZIP解压文件 /// </summary> /// <param name="zipFilePath">zip文件路径</param> /// <param name="extractPath">解压后保存文件的目录</param> public static void ExtractZipFile(string zipFilePath, string extractPath) { // 确保提取路径存在 if (!Directory.Exists(extractPath)) { Directory.CreateDirectory(extractPath); } using (var archive = ZipFile.OpenRead(zipFilePath)) { foreach (var entry in archive.Entries) { // 正确地处理文件夹结构 string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName)); //if (!destinationPath.StartsWith(extractPath, StringComparison.OrdinalIgnoreCase)) //{ // throw new IOException("试图解压的文件超出了目标文件夹的路径边界。"); //} if (entry.Name == "") // Entry是一个文件夹 { Directory.CreateDirectory(destinationPath); } else // Entry 是一个文件 { entry.ExtractToFile(destinationPath, overwrite: true); } } } } }