贝利信息

C#如何将XML文件压缩成ZIP包

日期:2026-01-15 00:00 / 作者:月夜之吻
最简单可靠的方式是使用.NET内置System.IO.Compression命名空间;创建FileStream输出流,用ZipArchive.CreateEntryFromFile直接添加XML文件,支持单个或多个文件及内存字符串写入。

在C#中将XML文件压缩成ZIP包,最简单可靠的方式是使用.NET内置的 System.IO.Compression 命名空间(.NET 4.5+),无需第三方库。核心步骤是:创建ZIP存档 → 将XML文件作为条目写入 → 关闭存档。

使用 ZipArchive 创建 ZIP 包

这是推荐方式,支持流式写入,内存占用低,适合单个或多个XML文件:

示例代码:

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

string xmlPath = @"C:\data\config.xml";
string zipPath = @"C:\output\config.zip";

using (var zipStream = new FileStream(zipPath, FileMode.Create))
using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
    // 将XML文件添加进ZIP,第二个参数指定ZIP内文件名(可含子目录)
    archive.CreateEntryFromFile(xmlPath, "config.xml");
    // 或存到子目录:archive.CreateEntryFromFile(xmlPath, "xml/config.xml");
}

压缩多个XML文件到同一个ZIP

只需多次调用 CreateEntryFromFile,注意ZIP内文件名不能重复:

小技巧:若想保留原始目录结构,可用 Path.GetRelativePath(.NET Core 2.1+ / .NET 5+)生成相对路径作为ZIP条目名。

从内存XML字符串生成ZIP(不依赖磁盘文件)

如果XML内容来自字符串或 XDocument,可先转为字节数组,再用 CreateEntry 写入:

示例片段:

string xmlContent = "test";
byte[] xmlBytes = Encoding.UTF8.GetBytes(xmlContent);

using (var zipStream = new FileStream(zipPath, FileMode.Create))
using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
    var entry = archive.CreateEntry("inline.xml");
    using (var entryStream = entry.Open())
    {
        entryStream.Write(xmlBytes, 0, xmlBytes.Length);
    }
}

注意事项与常见问题

实际使用时需留意几点:

不复杂但容易忽略:确保XML文件有读取权限,且ZIP路径有写入权限。