IIS使用OpenXML创建的Word文件在处理后继续被IIS锁定
本文关键字:IIS 处理 继续 锁定 文件 使用 OpenXML 创建 Word | 更新日期: 2023-09-27 18:02:43
我有一些扩展名为。docm的单词模板,其中包含标记化的标识符,这些标识符将被数据库中的实际值所替换。
我正在加载模板,克隆它并将文档类型从模板更改为文档,然后将其作为新文档保存到磁盘:
string templateFilePath = @"C:'TempDoc'Template.docm";
using (WordprocessingDocument template = WordprocessingDocument.CreateFromTemplate(templateFilePath))
{
using (WordprocessingDocument document = (WordprocessingDocument)template.Clone())
{
document.ChangeDocumentType(WordprocessingDocumentType.Document);
document.SaveAs(@"C:'TempDoc'Template.docx");
}
}
所有这些都可以工作,但是新创建的文件仍然被W3WP进程锁定,然后无法读取并从服务流回。
你知道如何防止IIS持有这个文件吗?
同样的代码可以在LinqPad中运行,一旦using块超出预期的范围,新文档就会立即解锁。
找到解决方法:
File.Copy(templateFilePath, documentFilePath, true);
using (WordprocessingDocument document = WordprocessingDocument.Open(documentFilePath, true))
{
document.ChangeDocumentType(WordprocessingDocumentType.Document);
不使用Clone和savea,这会离开锁,如果我文件复制模板,修改模板并保存,而不是savea,则不会维护锁。
谢谢!
SaveAs()
实际上与Clone()
相同(参见文档)。所以它不只是创建一个文件,而且还打开包,所以要解除锁,你应该Close()
它。
document.SaveAs(@"C:'TempDoc'Template.docx").Close();