"SaveAs" Wordprocessingdocument(Open XML)文件被锁定。

9
我使用OpenXML SDK编写了以下代码,通过“SaveAs”将Word文档保存到新文档中。然后我想尝试从ASP.Net读取创建的文件,但由于文件已被锁定且直到应用程序池重新启动才会释放,所以无法这样做。
        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(tempfile, true))
        {
            wordDoc.ChangeDocumentType(WordprocessingDocumentType.Document);

            Body body = wordDoc.MainDocumentPart.Document.Body;

            Paragraph para = body.AppendChild(new Paragraph());
            Run run = para.AppendChild(new Run());
            run.AppendChild(new Text("Testing"));

            wordDoc.SaveAs(tempfileMerged); 
        }

通过using关闭了wordDoc,但是我不确定如何释放通过“SaveAs”生成的文件上的锁定,并且无论如何都不确定为什么会出现文件锁定情况。


using 语句只跟踪在 using 语句中声明的元素的释放。在您的情况下,是 wordDoc,因此第一个 using 语句不会跟踪合并后的文件。 - Cleptus
2个回答

13

你已经非常接近了:

wordDoc.SaveAs(tempfileMerged).Close();


8
SaveAs方法返回一个WordprocessingDocument实例,应该将其存储在一个新变量中并调用其close方法以关闭它:
WordprocessingDocument merged = wordDoc.SaveAs(tempfileMerged);
merged.Close();

编辑:您还可以嵌套第二个using,例如。
using (WordprocessingDocument merged = wordDoc.SaveAs(tempfileMerged))
{
    merged.Close();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接