1

ここに私のコードの断片があります:

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行目で壊れます-ファイルが使用されていると表示されます。

私はエラーがどこにあるかではありません。どんな助けでも大歓迎です。

4

3 に答える 3

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;
于 2013-04-19T17:55:24.017 に答える
2

ファイルに書き込みを行っているプロセスが排他ロックを持っているため、エラーが発生しています。output開く前に閉じる必要があります。呼び出しの 2 番目のパラメーターは、Open編集用に開いていることを示しています。明らかに、ファイルをロックしています。そのコードを using ステートメントの外に移動すると、自動的にロックが解除されます。

于 2013-04-19T17:55:44.840 に答える
-1

3 行目で、編集するファイルを開きます

WordprocessingDocument.Open(outputPath, true)

しかし、8行目で、もう一度開こうとします

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

using応答ヘッダーを設定する前に、を閉じることができます。

于 2013-04-19T17:56:10.473 に答える