使用C#和System.IO.Compression.ZipArchive更新现有的ooxml文件

问题描述 投票:0回答:1

我正在尝试更新几乎空的docx / ooxml文件。我没有得到异常,代码正在运行但文件未被修改。

我想我错过了一些东西:/

下面的代码不是实际代码,而是一个简化的示例。它也在没有例外的情况下运行,但文件未更新。

using (var fs = new FileStream(docxFile, FileMode.Open))
{
    var archive = new ZipArchive(fs, ZipArchiveMode.Update);

    foreach (var entry in archive.Entries)
    {
        if (entry.Name == "[Content_Types].xml")
        {
            using (var entryStream = entry.Open())
            {
                var doc = new XmlDocument();
                doc.Load(entryStream);

                var element = doc.CreateElement("Override");
                element.SetAttribute("PartName", "/docProps/example.xml");

                doc.DocumentElement.AppendChild(element);

                doc.Save(entryStream);
                entryStream.Flush();
            }
            break;
        }
    }
}
c# zip
1个回答
0
投票

好像昨天晚了:(

要么使用usingZipArchive实例,要么在循环完成后调用Dispose;)

using (var fs = new FileStream(docxFile, FileMode.Open))
{
    using (var archive = new ZipArchive(fs, ZipArchiveMode.Update))
    {
        foreach (var entry in archive.Entries)
        {
            if (entry.Name == "[Content_Types].xml")
            {
                using (var entryStream = entry.Open())
                {
                    var doc = new XmlDocument();
                    doc.Load(entryStream);

                    var element = doc.CreateElement("Override");
                    element.SetAttribute("PartName", "/docProps/example.xml");

                    doc.DocumentElement.AppendChild(element);

                    doc.Save(entryStream);
                    entryStream.Flush();
                }
                break;
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.