使用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
答案 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的建议。