【发布时间】:2011-10-11 05:26:59
【问题描述】:
我不了解 Streams 的所有机制,更不了解 System.IO.Package 类。
我有一个 .docx 文档作为数据库中的二进制文件,我不想获取它,进行一些修改然后保存它。
我目前有在单独的库中修改文档的方法,因为它将在很多地方使用。
这就是我尝试这样做的方式:
byte[] doc = getDocFromDB();
using (MemoryStream mem = new MemoryStream())
{
mem.Write(doc, 0, 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 部分为空,那里的 fetcher 和 FillTemplate 方法中的代码都没有正确处理异常。
【问题讨论】:
-
Package.Open(str ...) 中的 str 是什么?那应该读我吗?这是您的实际代码还是您在粘贴之前对其进行了修改?
-
我将它从 str 修改为 mem 以使其更具可读性。我猜那失败了:/我已经修好了。
标签: c# stream package openxml-sdk