2013-12-14 1 views
4

Использование Open XML SDK, следующее дает «поток памяти не расширяемый», когда я достигаю линию FeedData (msData):Добавление в WordprocessingDocument, открытое из MemoryStream без получения «Поток памяти не расширяется»?

// Bytes in, bytes out 
internal static byte[] UpdateDataStoreInMemoryStream(byte[] bytes, 
    XmlDocument xdocData) 
{ 
    using (var msDoc = new MemoryStream(bytes)) 
    { 
     using (WordprocessingDocument wd = WordprocessingDocument.Open(msDoc, true)) 
     { 
     MainDocumentPart mdp = wd.MainDocumentPart; 
     CustomXmlPart cxp = mdp.CustomXmlParts.SingleOrDefault<CustomXmlPart>(); 
     using (MemoryStream msData = new MemoryStream()) 
     { 
      xdocData.Save(msData); 
      msData.Position = 0; 
      // Replace content of ...\customXml\item1.xml. 
      cxp.FeedData(msData); 
      // "Memory stream is not expandable" if more data than was there initially. 
     } 
     } 
     return msDoc.ToArray(); 
    } 
} 

Примечание: это не msData, что это проблема, но msDoc.

Stein-Tore

ответ

8

Проблема была (на самом деле совершенно очевидно из сообщения об ошибке), что

using (var msDoc = new MemoryStream(bytes)) ... 

создает MemoryStream фиксированного размера. Таким образом, решение заключается в создании расширяемого модуля MemoryStream:

MemoryStream msDoc = new MemoryStream(); 
msDoc.Write(bytes, 0, bytes.Length); 
msDoc.Position = 0; 
... 

 Смежные вопросы

  • Нет связанных вопросов^_^