C# 从数据库加载二进制文件并将其作为openxml处理
我有这样一种方法,可以从存储为二进制的数据库加载文档文件,然后用参数替换customxml部分 不知何故,当我将字节转换为MemoryStream然后处理它时,它不起作用,我的自定义xml部分并没有被替换。但若我使用FileStream并从磁盘读取相同的文件,那个么它将被完美地替换 MemoryStream有什么问题?我也不能将MemoryStream强制转换为FileStream或创建instrance of Stream等。。 有什么建议吗C# 从数据库加载二进制文件并将其作为openxml处理,c#,.net,stream,openxml,memorystream,C#,.net,Stream,Openxml,Memorystream,我有这样一种方法,可以从存储为二进制的数据库加载文档文件,然后用参数替换customxml部分 不知何故,当我将字节转换为MemoryStream然后处理它时,它不起作用,我的自定义xml部分并没有被替换。但若我使用FileStream并从磁盘读取相同的文件,那个么它将被完美地替换 MemoryStream有什么问题?我也不能将MemoryStream强制转换为FileStream或创建instrance of Stream等。。 有什么建议吗 private static Stream L
private static Stream LoadContent(byte[] content, XmlDocument parameters)
{
//FileStream works perfectly
//Stream fileStream = new FileStream(@"C:\temp\test.docx", FileMode.Open);
Stream documentStream = new MemoryStream();
documentStream.Write(content, 0, content.Length);
//Processes word file, replace custom xml parts with parameters
using (WordprocessingDocument document = WordprocessingDocument.Open(documentStream, true))
{
MainDocumentPart mainPart = document.MainDocumentPart;
Stream partStream = mainPart.CustomXmlParts.First().GetStream();
using (XmlWriter xmlWriter = XmlWriter.Create(partStream, new XmlWriterSettings { CloseOutput = false }))
{
parameters.WriteTo(xmlWriter);
xmlWriter.Flush();
}
mainPart.Document.Save();
}
return documentStream;
}
在向memorystream写入数据之后,在再次读取之前,您可能希望尝试将memorystream的“Position”属性设置为0 另外,您还可以将字节数组传递给memorystream的构造函数,而不是调用writer 编辑 根据MSDN,我看到“Document.Save”方法将刷新流以允许propper保存。( ). 然而,MemoryStream在flush()上不会做任何事情
您可以尝试创建一个新的MemoryStream,然后将其作为参数传递给“Document.Save”方法。我已经尝试了这两个建议,位置没有帮助,还有一件事,如果我使用filestream从磁盘获取文件,然后复制到MemoryStream,则无法再次使用!是-需要调用Document.Save(),然后调用Flush(),然后将位置设置为0。