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

时间:2013-04-19 17:49:37

标签: c#

以下是我的代码片段:

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位置中的文件最初不存在。它在第1行创建。在第8行它会中断 - 它表示正在使用该文件。

我不是错误所在。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您需要先完成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;

答案 1 :(得分:2)

您收到错误,因为写入该文件的进程对其进行了独占锁定。在尝试打开它之前,您需要关闭output。你在Open电话中的第二个参数是说你正在打开进行编辑,显然是在锁定文件。您可以将该代码移到using语句之外,该语句将自动处理锁。

答案 2 :(得分:-1)

在第3行,您打开要编辑的文件

WordprocessingDocument.Open(outputPath, true)

但是在第8行,你试图再次打开它

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

您可以在设置回复标题之前关闭using