最简单可靠的方式是使用.NET内置System.IO.Compression命名空间;创建FileStream输出流,用ZipArchive.CreateEntryFromFile直接添加XML文件,支持单个或多个文件及内存字符串写入。
在C#中将XML文件压缩成ZIP包,最简单可靠的方式是使用.NET内置的 System.IO.Compression 命名空间(.NET 4.5+),无需第三方库。核心步骤是:创建ZIP存档 → 将XML文件作为条目写入 → 关闭存档。
这是推荐方式,支持流式写入,内存占用低,适合单个或多个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");
}
只需多次调用 CreateEntryFromFile,注意ZIP内文件名不能重复:
Directory.GetFiles("*.xml"))Path.GetFileName 避免绝对路径)小技巧:若想保留原始目录结构,可用 Path.GetRelativePath(.NET Core 2.1+ / .NET 5+)生成相对路径作为ZIP条目名。
如果XML内容来自字符串或 XDocument,可先转为字节数组,再用 CreateEntry 写入:
示例片段:
string xmlContent = ""; 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); } } - test
实际使用时需留意几点:

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