.NET怎么压缩和解压缩ZIP文件

.NET内置支持ZIP压缩解压,通过System.IO.Compression命名空间实现。使用ZipFile.CreateFromDirectory可压缩文件夹,ZipFile.ExtractToDirectory可解压ZIP到指定目录,目标目录需为空。压缩单个或多个文件可用ZipFile.Open结合CreateEntryFromFile逐个添加。支持设置CompressionLevel压缩级别:NoCompression、Fastest、Optimal,以平衡速度与压缩率。.NET Core及后续版本默认支持,旧版Framework需安装System.IO.Compression.FileSystem包。操作时需注意路径权限与异常处理。

.NET 提供了内置的方式来处理 ZIP 文件的压缩与解压缩,主要通过 System.IO.Compression 命名空间中的类来实现。你不需要引入第三方库就能完成基本的 ZIP 操作。

启用 ZIP 功能

注意:你需要在项目中引用以下命名空间:
  • System.IO.Compression
  • System.IO.Compression.ZipFile
如果你使用的是 .NET Core 或 .NET 5+,这些功能默认可用。如果是较老的 .NET Framework 项目,可能需要通过 NuGet 安装 System.IO.Compression.FileSystem 包。

压缩文件夹为 ZIP

使用 ZipFile.CreateFromDirectory() 可以将整个文件夹压缩成 ZIP 文件。

using System.IO.Compression;

// 示例:将 D:\MyFolder 压缩为 D:\MyArchive.zip
string sourceDir = @"D:\MyFolder";
string zipPath = @"D:\MyArchive.zip";

ZipFile.CreateFromDirectory(sourceDir, zipPath);

该方法会递归包含子目录和所有文件。

解压缩 ZIP 文件

使用 ZipFile.ExtractToDirectory() 可以将 ZIP 文件解压到指定目录。

// 示例:将 D:\MyArchive.zip 解压到 D:\Extracted\
string zipPath = @"D:\MyArchive.zip";
string extractPath = @"D:\Extracted\";

ZipFile.ExtractToDirectory(zipPath, extractPath);

目标目录必须为空,否则会抛出异常。如果希望覆盖文件,可以先删除目标目录或使用其他方式控制。

压缩单个或多个文件

如果只想压缩几个特定文件(而不是整个目录),可以手动创建 ZIP 并逐个添加条目。

string[] files = { @"D:\file1.txt", @"D:\file2.txt" };
string zipPath = @"D:\SelectedFiles.zip";

using (var archive = ZipFile.Open(zipPath, ZipArchiveMode.Create))
{
    foreach (string file in files)
    {
        archive.CreateEntryFromFile(file, Path.GetFileName(file));
    }
}

这里使用 ZipFile.Open() 创建一个可写 ZIP 归档,然后用 CreateEntryFromFile 添加每个文件。

额外选项:压缩级别

你可以指定压缩级别来平衡速度与压缩率。

ZipFile.CreateFromDirectory(
    sourceDir,
    zipPath,
    CompressionLevel.Optimal, // 可选: NoCompression, Fastest, Optimal
    false // 是否包含基目录
);

CompressionLevel 枚举说明:

  • NoCompression:不压缩,速度快
  • Fastest:快速压缩,体积稍大
  • Optimal:尽可能小,耗时较长
基本上就这些。.NET 的 ZIP 支持简单直接,适合大多数日常场景。只要注意路径权限、目标目录状态和异常处理,就能稳定运行。