Selection.InsertFile失败并显示“disk is full”错误消息

时间:2018-03-19 16:31:29

标签: c# ms-word interop

使用c#和Interop Word我试图将指定目录中的所有文件合并到一个新文档中。我的代码循环遍历文件名列表,并使用“InsertFile”将每个文件名添加到Selection中。

有很多文件,一段时间后进程失败。错误消息显示为:

  

磁盘已满。释放此驱动器上的一些空间,或将文档保存在另一个磁盘上   请尝试下列办法中的一个或多个:

     
      
  • 关闭所有不需要的文档,程序和窗口。
  •   
  • 将文档保存在另一个磁盘上。“
  •   

在InsertFile失败时,选择使用大约7MB。我的磁盘有300GB的可用空间,机器有32GB的RAM。

我保存的文件中没有任何图形或数学。

我做错了什么?异常是在foreach循环内的InsertFile行上抛出(下面)。

代码紧随其后。请注意,我从一个winword实例开始,该实例是一个名为FOO FOO_copy(FOO volatile const& other) { FOO result; std::tie(result.a, result.b, result.c) = std::tie(other.a, other.b, other.c); return result; } 的类的成员。此外,请注意,如果我使用少量文件(如100-200),此代码可以正常工作。

PrintObj

2 个答案:

答案 0 :(得分:0)

您可以使用文件名检查路径吗?

前一段时间我记得因为255个字符的问题得到了磁盘已满的错误,可能其中一个文件的路径太长了

https://support.code42.com/CrashPlan/4/Troubleshooting/Windows_file_paths_longer_than_255_characters

尝试将文件保存在不同的目录中,例如C:\ YourFolder

答案 1 :(得分:0)

最终我放弃了MS程序集并使用Xceed.Words.NET来解决这个问题,这很有效。当使用Selection对象时,该过程总是在大约840个插入文档之后挂起(它总是与插入文档的确切数量相同),这是一个问题,因为我需要插入超过1200个文件。最终的doc目前只有超过15,706,000个字符和超过11,700个页面,而且刚刚超过4MB。 在我看来,这是Interop Word文档类中的一个缺陷,因为附加文档是一个非常常见的用例。 ((注意在几周之后添加 - 有机会返回并尝试在每次插入完成时添加计数器然后

if (Counter % 100 == 0)
 {
    mergeDoc.UndoClear();
 }

这很有用。感谢CM的建议。