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();