c# – 流入包,打包到WordDocument然后再返回

c# – 流入包,打包到WordDocument然后再返回,第1张

概述我不了解Streams周围的所有机制,甚至不了解System.IO.Package类. 我有一个.docx文件作为数据库中的二进制文件,我不想获取它,稍微修改然后保存它. 我目前有一个方法,在一个单独的库中修改文档,因为它将在许多地方使用. 这就是我尝试这样做的方式: byte[] doc = getDocFromDB();using (MemoryStream mem = new Memory 我不了解Streams周围的所有机制,甚至不了解System.IO.Package类.

我有一个.docx文件作为数据库中的二进制文件,我不想获取它,稍微修改然后保存它.

我目前有一个方法,在一个单独的库中修改文档,因为它将在许多地方使用.

这就是我尝试这样做的方式:

byte[] doc = getDocFromDB();using (MemoryStream mem = new MemoryStream()){    mem.Write(doc,doc.Length);    Package pack = Package.Open(mem,fileMode.Open,fileAccess.ReaDWrite);    filler.FillTemplate(ref pack,someIrreleventData);    string filePath = Path.GetTempPath() + "docname.docx";    using (fileStream file = new fileStream(filePath,fileMode.Create))    {        mem.Writeto(file);        file.Flush();        file.Close();    }    Process.Start(filePath);}

库代码如下:

public voID FillTemplate(ref Package package,XElement data){    Wordprocessingdocument document = Wordprocessingdocument.Open(package);    //add the data to the document    //should I do document.close() or document.dispose() here?}

该文档就像它保存到数据库中一样,没有添加所有额外数据.

我假设我打开包含内存流的包,所有对包的更改也会保存到流中.

我做错了什么,怎样才能做得更好.

编辑

我错了,我的代码没有任何损坏.问题是someIrreleventData部分为null,并且那里的fetcher和FillTemplate方法中的代码都没有正确处理异常.

解决方法 在尝试将其保存到文件之前,我没有看到任何在包上调用Flush()和/或Close()的地方……
尝试改变
mem.Write(doc,doc.Length);mem.position = 0; // new,perhaps this is relevant for Package.Open ?Package pack = Package.Open(mem,fileAccess.ReaDWrite);filler.FillTemplate(ref pack,someIrreleventData);pack.Flush(); pack.Close(); // newmem.position = 0;  // new

AND:是的,你应该调用document.Close().

调用.dispose()是一个好主意虽然如果你使用块来处理它和其他一些事情会更好…

总结

以上是内存溢出为你收集整理的c# – 流入包,打包到WordDocument然后再返回全部内容,希望文章能够帮你解决c# – 流入包,打包到WordDocument然后再返回所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1245426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存