生成的文件仍然被锁定

时间:2018-11-07 08:50:38

标签: c# openxml-sdk memorystream

我正在使用OpenXML SDK生成并保存Word文档。

我正在使用“使用中的”块来创建和处理存储流以及完成后的word文档对象。但是,当尝试打开文件时,出现错误,指出该文件仍在被另一个进程使用。 通过查看资源监视器,我已经发现它仍然是我的c#应用程序,仍保持打开状态。 当我关闭应用程序时,我可以使用文件

我有以下代码。

private void button2_Click(object sender, EventArgs e)
{
    // Create Stream
    using (MemoryStream mem = new MemoryStream())
    {
        // Create Document
        using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document, true))
        {
            // Add a main document part. 
            MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();

            // Create the document structure and add some text.
            mainPart.Document = new Document();
            Body docBody = new Body();
            mainPart.Document.Append(docBody);
            wordDocument.SaveAs(@"E:\Report\word.docx");
            // Add your docx content here
            wordDocument.Close();
        }
    }
}

我理解正确吗

using (MemoryStream mem = new MemoryStream())

在块完成后应该丢弃MemoryStream,从而允许文件被另一个进程使用吗?

谢谢

1 个答案:

答案 0 :(得分:2)

SaveAs返回一个 new 包对象,该对象表示存储在该文件中的包。您还需要// Simple recursion def merge1(listA: List[String], listB: List[String]): List[String] = (listA, listB) match { case (Nil, Nil) => Nil case (head1 :: tail1, Nil) => head1 :: merge1(tail1, Nil) case (Nil, head2 :: tail2) => head2 :: merge1(Nil, tail2) case (head1 :: tail1, head2 :: tail2) => head1 + head2 :: merge1(tail1, tail2) } merge1 (List("a", "b", "c", "d"), List("e", "f", "g", "h", "i", "j")); // Tail recursion def merge2 (listA1: List[String], listB1: List[String]): List[String] = { def merge2Helper(listA: List[String], listB: List[String], listACC: List[String]): List[String] = (listA, listB) match { case (Nil, Nil) => listACC case (head1 :: tail1, Nil) => merge2Helper(tail1, listB, listACC ::: List(head1)) case (Nil, head2 :: tail2) => merge2Helper(tail2, listB, listACC ::: List(head2)) case (head1 :: tail1, head2 :: tail2) => merge2Helper(tail1, tail2, listACC ::: List(head1 + head2)) } merge2Helper(listA1, listB1, Nil) } merge2 (List("a", "b", "c", "d"), List("e", "f", "g", "h", "i", "j")); 该软件包。

Close