Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS使用OpenXML创建的Word文件在处理后继续被IIS锁定_C#_Iis_Openxml_Openxml Sdk - Fatal编程技术网

C# IIS使用OpenXML创建的Word文件在处理后继续被IIS锁定

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

我有一些扩展名为.docm的word模板,其中包含标记化的标识符,这些标识符将被数据库中的实际值替换

在将其作为新文档保存到磁盘之前,我正在加载模板、克隆模板并将文档类型从一个模板更改为另一个文档:

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。