C# 的 System.IO.Compression 命名空间中提供了 ZipArchive 类,它可以用于创建、打开和操作 ZIP 文件。下面是一些常见的用法示例:

创建zip文件

要创建一个 ZIP 文件,需要使用 ZipArchive 类的构造函数来创建一个实例,并将其与输出流(例如文件流)相关联。然后使用 CreateEntry 方法在 ZIP 文件中添加条目。

using System.IO.Compression;

using var stream = new FileStream("example.zip", FileMode.Create);
using var zip = new ZipArchive(stream, ZipArchiveMode.Create);
var entry = zip.CreateEntry("example.txt");
using var writer = new StreamWriter(entry.Open());
writer.Write("Hello world!");

从zip文件中读取条目

要从 ZIP 文件中读取条目,需要使用 ZipArchive 类的构造函数来创建一个实例,并将其与输入流(例如文件流)相关联。然后使用 GetEntry 方法来获取条目,并使用 Open 方法来获取条目的输入流。

using System.IO.Compression;

using var stream = new FileStream("example.zip", FileMode.Open);
using var zip = new ZipArchive(stream, ZipArchiveMode.Read);
foreach (var entry in zip.Entries)
{
    Console.WriteLine($"Entry:{entry.FullName},Size:{entry.Length} bytes");

    using var reader = new StreamReader(entry.Open());
    Console.WriteLine(reader.ReadToEnd());
}

修改 zip 文件

要修改一个 ZIP 文件,可以使用 ZipArchive 类的 CreateEntry 方法创建新条目,或者使用 GetEntry 方法获取现有条目并修改其内容。可以使用 Delete 方法删除现有条目。

using System.IO.Compression;

using var stream = new FileStream("example.zip", FileMode.OpenOrCreate);
using var zip = new ZipArchive(stream, ZipArchiveMode.Update);
// 添加一个新的条目
var entry1 = zip.CreateEntry("new.txt");
using (var writer = new StreamWriter(entry1.Open()))
{
    writer.Write("This is a new file.");
}

// 修改一个已存在的条目
var entry2 = zip.GetEntry("example.txt");
if (entry2 != null)
{
    using var writer = new StreamWriter(entry2.Open());
    writer.Write("This file has been modified.");
}

// 删除一个已存在的条目
var entry3 = zip.GetEntry("old.txt");
entry3?.Delete();