ZetCode

C# ZipFile

最后修改于 2023 年 7 月 5 日

在本文中,我们使用 ZipFile 在 C# 中创建、读取和提取 ZIP 文件。

ZIP

ZIP 是一种支持无损数据压缩的归档文件格式。 一个 ZIP 文件可能包含一个或多个已被压缩的文件或目录。

ZipFile 提供了用于创建、提取和打开 zip 存档的静态方法。 它是 System.IO.Compression 包的一部分。

C# ZipFile.CreateFromDirectory

ZipFile.CreateFromDirectory 创建一个 zip 存档,其中包含指定目录中的文件和目录。

Program.cs
using System.IO.Compression;

string dirName = "data";
string zipName = "archive.zip";

if (File.Exists(zipName))
{
    File.Delete(zipName);
}

ZipFile.CreateFromDirectory(dirName, zipName);

在本例中,我们从一个目录创建一个新的 ZIP 文件。

string dirName = "data";
string zipName = "archive.zip";

我们定义目录和 ZIP 存档的名称。

if (File.Exists(zipName))
{
    File.Delete(zipName);
}

我们使用 File.Exists 检查该存档是否已存在。 如果存在,我们使用 File.Delete 删除它。

ZipFile.CreateFromDirectory(dirName, zipName);

ZipFile.CreateFromDirectory 的参数是目录名称和 ZIP 文件的名称。

C# ZipFile 包含指定文件

在下一个例子中,我们选择要包含在存档中的文件。

Program.cs
using System.IO.Compression;

string zipName = "archive.zip";

if (File.Exists(zipName))
{
    File.Delete(zipName);
}

var files = Directory.GetFiles(@"data", "*.jpg");

using var archive = ZipFile.Open(zipName, ZipArchiveMode.Create);

foreach (var file in files)
{
    archive.CreateEntryFromFile(file, Path.GetFileName(file));
}

该程序从指定目录获取所有 JPG 图像并从中创建一个存档。

var files = Directory.GetFiles(@"data", "*.jpg");

使用 Directory.GetFiles,我们找到所有与给定模式匹配的文件。

using var archive = ZipFile.Open(zipName, ZipArchiveMode.Create);

我们使用 ZipFile.OpenZipArchiveMode.Create 中打开 ZIP 存档。

foreach (var file in files)
{
    archive.CreateEntryFromFile(file, Path.GetFileName(file));
}

我们使用 CreateEntryFromFile 将文件添加到存档。

C# ZipFile.ExtractToDirectory

ZipFile.ExtractToDirectory 将指定 zip 存档中的所有文件提取到给定的目录。

Program.cs
using System.IO.Compression;

string dirName = "data2";
string zipName = "archive.zip";

if (Directory.Exists(dirName))
{
    Directory.Delete(dirName, true);
}

ZipFile.ExtractToDirectory(zipName, dirName);

在本例中,我们将 ZIP 文件的内容提取到一个目录。

if (Directory.Exists(dirName))
{
    Directory.Delete(dirName, true);
}

首先,我们使用 Directory.Exists 检查目录是否已存在,如果存在,则使用 Directory.Delete 删除它。

ZipFile.ExtractToDirectory(zipName, dirName);

我们使用 ZipFile.ExtractToDirectory 将存档提取到目录。


ZipFile.ExtractToDirectory 有一个重载,它接受 overwriteFiles 参数。 如果设置为 true,它将覆盖目标文件。

Program.cs
using System.IO.Compression;

string dirName = "data2";
string zipName = "archive.zip";

ZipFile.ExtractToDirectory(zipName, dirName, true);

在本例中,我们使用 overwriteFiles 参数,而不是检查和删除目录。

C# ZipFile 读取内容

在下一个例子中,我们读取 ZIP 文件的内容。

Program.cs
using System.IO.Compression;

string zipFile = "data.zip";

using var archive = ZipFile.OpenRead(zipFile);

foreach (var entry in archive.Entries)
{
    Console.WriteLine(entry.Name);
}

使用 ZipFile.Open,我们打开一个 zip 存档以进行读取。

foreach (var entry in archive.Entries)
{
    Console.WriteLine(entry.Name);
}

通过 Entries 属性,我们检索 ZIP 存档中的所有文件。

来源

ZipFile 类 - 语言参考

在本文中,我们使用 C# 处理了 ZIP 文件。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程