После использования базы WordprocessingDocument на сайте Microsoft в MVC появилось сообщение «Поток памяти не расширяется» - PullRequest
0 голосов
/ 25 августа 2018

В настоящее время я пользуюсь базой «Поиск и замена текста в части документа (Open XML SDK)» на сайте Microsoft. Я понял, что после загрузки файла на мой диск возникла проблема с кодом.

Итак, я открыл этот файл и получил сообщение

ПОТОК ПАМЯТИ НЕ РАСШИРЯЕТСЯ при sw.Write (docText);

Как это исправить?

В классе GenerateDocxHelper:

 private readonly MemoryStream _mem;
 private Dictionary<string, string> _dicData;

 public GenerateDocxHelper(string path)
 {
     _mem = new MemoryStream(System.IO.File.ReadAllBytes(path));
     _dicData = new Dictionary<string, string>();
 }

 public MemoryStream ReplaceTextInWord()
 {
     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(_mem, true))
        {


            string docText = null;
            using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
            {
                docText = sr.ReadToEnd();
            }


            foreach (var data in _dicData)
            {
                docText = docText.Replace(data.Key, data.Value);
            }

            using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
            {
                sw.Write(docText);
            }
        }

        _mem.Seek(0, SeekOrigin.Begin);

        return _mem;
 }

1 Ответ

0 голосов
/ 28 августа 2018

Вы должны создать MemoryStream с capacity = 0, что означает, что его можно изменить, и затем добавьте байты, которые вы прочитали из файла.

var allBytes = File.ReadAllBytes(path);

//this makes _mem resizeable 
_mem = new MemoryStream(0);

_mem.Write(allBytes, 0, allBytes.Length);

Проверьте это ответ

...