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

来源:这里教程网 时间:2026-02-21 17:29:27 作者:

.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 支持简单直接,适合大多数日常场景。只要注意路径权限、目标目录状态和异常处理,就能稳定运行。

相关推荐