文件已打开,但不确定何时关闭

本文关键字:不确定 何时关 文件 | 更新日期: 2023-09-27 18:10:00

这是我的代码片段:

System.IO.File.Copy(templatePath, outputPath, true);
using(var output = WordprocessingDocument.Open(outputPath, true))
{
    Body updatedBodyContent = new Body(newWordContent.DocumentElement.InnerXml);
    output.MainDocumentPart.Document.Body = updatedBodyContent;
    output.MainDocumentPart.Document.Save();
    response.Content = new StreamContent(
        new FileStream(outputPath, FileMode.Open, FileAccess.Read));
    response.Content.Headers.ContentDisposition =
        new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = outputPath;
}

outputPath位置中的文件最初不存在。它是在第一行创建的。在第8行,它中断了——它说文件正在被使用。

我不是错误所在。

文件已打开,但不确定何时关闭

您需要完成WordprocessingDocument并在尝试打开文件之前关闭它。这应该可以工作:

System.IO.File.Copy(templatePath, outputPath, true);
using (WordprocessingDocument output = 
       WordprocessingDocument.Open(outputPath, true))
{
    Body updatedBodyContent = 
        new Body(newWordContent.DocumentElement.InnerXml);
    output.MainDocumentPart.Document.Body = updatedBodyContent;
    output.MainDocumentPart.Document.Save();
}
response.Content = new StreamContent(new FileStream(outputPath, 
                                                    FileMode.Open, 
                                                    FileAccess.Read));
response.Content.Headers.ContentDisposition = 
    new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = outputPath;

您将得到一个错误,因为正在写入文件的进程对它具有排他锁。您需要关闭output之前,试图打开它。您在Open呼叫中的第二个参数是说您正在打开编辑,显然这是锁定文件。您可以将该代码移到using语句之外,它将自动释放锁。

在第3行,打开文件编辑

WordprocessingDocument.Open(outputPath, true)

但是在第8行,您尝试再次打开它

new FileStream(outputPath, FileMode.Open, FileAccess.Read)

您可以在设置响应头之前关闭您的using