以下是我的代码片段:
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行它会中断 - 它表示正在使用该文件。
我不是错误所在。任何帮助将不胜感激。
答案 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
。