在 .NET 中处理 ZIP 文件非常方便,.NET Framework 4.5 及以上版本内置了 System.IO.Compression 命名空间,支持无需第三方库即可实现 ZIP 文件的压缩与解压。下面介绍如何使用原生 API 实现常见操作。
启用 ZIP 支持
确保项目中引用了以下命名空间:
using System.IO.Compression;using System.IO;
如果使用的是 .NET Core 或 .NET 5+,这些功能默认可用。对于较老的 .NET Framework 项目,确认目标框架为 4.5 或更高。
压缩文件到 ZIP
使用 ZipFile.CreateFromDirectory() 可将整个文件夹压缩为 ZIP 文件。
示例:把 D:\MyFolder 压缩成 archive.zip
ZipFile.CreateFromDirectory(@"D:MyFolder", @"D:rchive.zip");你也可以控制压缩级别和是否包含根目录:
ZipFile.CreateFromDirectory(@"D:MyFolder",
@"D:rchive.zip",
CompressionLevel.Optimal,
false // 是否包含根目录
);
若只需压缩多个单独文件,可先将它们复制到临时目录再压缩,或手动创建 ZIP 存档:
using (var archive = ZipFile.Open(@"D:iles.zip", ZipArchiveMode.Create)){
archive.CreateEntryFromFile(@"D:ile1.txt", "file1.txt");
archive.CreateEntryFromFile(@"D:ile2.jpg", "file2.jpg");
}
解压缩 ZIP 文件
使用 ZipFile.ExtractToDirectory() 可将 ZIP 文件解压到指定路径。
ZipFile.ExtractToDirectory(@"D:rchive.zip", @"D:OutputFolder");如果目标目录已存在文件,默认会抛出异常。建议先检查或删除目标文件夹:
if (Directory.Exists(@"D:OutputFolder"))Directory.Delete(@"D:OutputFolder", true);
ZipFile.ExtractToDirectory(@"D:rchive.zip", @"D:OutputFolder");
如需更精细控制(例如跳过某些文件),可以打开 ZIP 存档并逐项处理:
using (var archive = ZipFile.OpenRead(@"D:rchive.zip")){
foreach (var entry in archive.Entries)
{
if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
{
entry.ExtractToFile(Path.Combine(@"D:Output", entry.FullName), true);
}
}
}
注意事项
处理 ZIP 文件时注意以下几点:
路径分隔符建议使用反斜杠或 Path.Combine() 避免错误 压缩或解压大文件时考虑流式处理以减少内存占用 确保程序对源路径和目标路径有读写权限 使用 using 语句确保资源正确释放基本上就这些。.NET 内置的 ZIP 功能足够应对大多数日常需求,不复杂但容易忽略细节。按上述方法操作,能快速实现文件压缩与解压功能。
