C# IIS使用OpenXML创建的Word文件在处理后继续被IIS锁定
我有一些扩展名为.docm的word模板,其中包含标记化的标识符,这些标识符将被数据库中的实际值替换 在将其作为新文档保存到磁盘之前,我正在加载模板、克隆模板并将文档类型从一个模板更改为另一个文档:C# IIS使用OpenXML创建的Word文件在处理后继续被IIS锁定,c#,iis,openxml,openxml-sdk,C#,Iis,Openxml,Openxml Sdk,我有一些扩展名为.docm的word模板,其中包含标记化的标识符,这些标识符将被数据库中的实际值替换 在将其作为新文档保存到磁盘之前,我正在加载模板、克隆模板并将文档类型从一个模板更改为另一个文档: string templateFilePath = @"C:\TempDoc\Template.docm"; using (WordprocessingDocument template = WordprocessingDocument.CreateFromTemplate(templateFil
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和SaveAs(这会留下锁)不同,如果我复制模板,修改模板并将其另存为SaveAs,则不会保留锁
谢谢 找到了一个解决方法:
File.Copy(templateFilePath, documentFilePath, true);
using (WordprocessingDocument document = WordprocessingDocument.Open(documentFilePath, true))
{
document.ChangeDocumentType(WordprocessingDocumentType.Document);
与使用Clone和SaveAs(这会留下锁)不同,如果我复制模板,修改模板并将其另存为SaveAs,则不会保留锁
谢谢 SaveAs()
实际上与Clone()
相同(请参阅)。因此,它不仅创建了一个文件,还打开了包,因此要移除锁,您应该Close()
it
document.SaveAs(@"C:\TempDoc\Template.docx").Close();
SaveAs()
实际上与Clone()
相同(请参阅)。因此,它不仅创建了一个文件,还打开了包,因此要移除锁,您应该Close()
it
document.SaveAs(@"C:\TempDoc\Template.docx").Close();
是什么让您相信该文件已被W3WP锁定?例如,您看到了什么错误信息或类似信息?这可能与问题有关…谢谢你的回答。当我试图从磁盘打开文件时,Word告诉我无法打开该文件,因为它已在使用中。当我使用Unlocker找出哪个进程锁定了文件时,它会显示W3WP。是什么让你相信文件被W3WP锁定的?例如,您看到了什么错误信息或类似信息?这可能与问题有关…谢谢你的回答。当我试图从磁盘打开文件时,Word会告诉您无法打开它,因为它已经在使用中。当我使用Unlocker找出哪个进程锁定了文件时,它会显示W3WP。