使用 .NET 6 中的 ZipArchive 类进行压缩和解压

随着数据存储和传输的需求日益增长,压缩和解压缩技术在软件开发中变得愈发重要。本文将介绍如何在 .NET 6 中使用 ZipArchive 类来处理 ZIP 文件。我们将涵盖基础知识、代码示例及其应用场景。

缩略图

classDiagram
    class ZipArchive {
        + Stream BaseStream
        + ZipArchiveMode Mode
        + ZipEntry CreateEntry(string entryName)
        + ZipEntry GetEntry(string entryName)
        + void ExtractToDirectory(string destinationDirectoryName)
        + void Dispose()
    }
    
    class ZipArchiveEntry {
        + string FullName
        + DateTimeOffset LastWriteTime
        + long Length
        + void ExtractToFile(string destinationPath)
    }

    ZipArchive --> "0..*" ZipArchiveEntry : contains

1. ZipArchive 类概述

在 .NET 6 中,ZipArchive 类属于 System.IO.Compression 命名空间,提供了创建、打开和读取 ZIP 文件的功能。ZipArchive 类可以用于批量压缩文件或文件夹,也能读取其中的文件信息。

2. 主要属性和方法

  • BaseStream: 获取与此 ZipArchive 关联的原始流。
  • Mode: 获取当前 ZipArchive 的模式 (读取、写入或更新)。
  • CreateEntry: 创建一个新的压缩文件条目。
  • GetEntry: 获取 ZIP 文件中的特定条目。
  • ExtractToDirectory: 将 ZIP 文件提取到指定目录。
  • Dispose: 释放 ZipArchive 类使用的所有资源。

3. 代码示例

下面的代码示例展示了如何使用 ZipArchive 类创建一个 ZIP 文件并向其中添加文件。

3.1 创建 ZIP 文件
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @"C:\example\result.zip";
        string[] filesToCompress = { @"C:\example\file1.txt", @"C:\example\file2.txt" };

        // 创建一个压缩文件
        using (FileStream zipToCreate = new FileStream(zipPath, FileMode.Create))
        {
            using (ZipArchive archive = new ZipArchive(zipToCreate, ZipArchiveMode.Create))
            {
                foreach (var file in filesToCompress)
                {
                    archive.CreateEntryFromFile(file, Path.GetFileName(file));
                }
            }
        }

        Console.WriteLine("ZIP 文件创建成功!");
    }
}

上面的示例中,我们创建了一个新的 ZIP 文件,并向其中添加了两个文本文件。使用 CreateEntryFromFile 方法可以方便地将文件添加到 ZIP 文件中。

3.2 解压 ZIP 文件

以下代码展示了如何从 ZIP 文件中提取文件。

using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @"C:\example\result.zip";
        string extractPath = @"C:\example\extracted";

        // 解压缩 ZIP 文件
        ZipFile.ExtractToDirectory(zipPath, extractPath);
        Console.WriteLine("ZIP 文件成功解压到目标目录!");
    }
}

在这个示例中,我们使用 ZipFile 类的 ExtractToDirectory 方法将 ZIP 文件中的所有内容提取到指定目录。

4. 创建条目与文件信息

ZipArchive 还允许你管理压缩文件中的条目并获取信息。以下代码显示了如何获取 ZIP 文件中条目的信息。

using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @"C:\example\result.zip";

        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                Console.WriteLine($"文件名: {entry.FullName}");
                Console.WriteLine($"大小: {entry.Length} bytes");
                Console.WriteLine($"修改时间: {entry.LastWriteTime}");
                Console.WriteLine();
            }
        }
    }
}

在这个例子中,我们读取了 ZIP 文件中的所有条目,并输出了它们的文件名、大小和最后修改时间。

5. 使用案例

使用 ZipArchive 类的典型场景包括:

场景 描述
数据存档 将数据集合压缩并存档以节省存储空间和便于管理。
文件传输 在传输文件时进行压缩,以减少传输时间和带宽消耗。
打包部署 将应用程序及其依赖项打包为压缩文件,便于分发和部署。

6. 小结

通过本文的介绍,我们了解了 .NET 6ZipArchive 类的基本用法,包括创建、解压缩 ZIP 文件以及获取条目信息的示例。使用压缩格式可以有效地管理数据存储与传输,提升应用程序的性能。

压缩和解压缩是现代软件开发中不可或缺的功能,而 ZipArchive 提供了简洁而有效的解决方案,确保开发人员能够高效地处理文件压缩逻辑。希望你在日后的开发工作中能够灵活运用这些知识,提升工作效率与项目质量。