Обновите существующий файл ooxml с помощью C # и System.IO.Compression.ZipArchive - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь обновить почти пустой файл 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;
        }
    }
}

1 Ответ

0 голосов
/ 05 марта 2019

Похоже, что было поздно вчера: (

Либо используйте using с экземпляром ZipArchive, либо вызывайте 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;
            }
        }
    }
}
...