我有一个Windows服务可以将文件复制到文件夹中并替换Word文档中的文本。对于文档中的替换,我使用此代码:在Word文档中查找和替换文本
问题是:文件一直使用,直到我将下一个文件复制到另一个文件夹(并填写Word文档(。
我的搜索和替换代码如下所示:
using (var flatDocument = new FlatDocument(fullpath))
{
flatDocument.FindAndReplace("ValueA", "ValueB");
// Save document on Dispose.
}
如果我跳过此代码,则服务运行良好,复制后文件未使用。为什么即使在使用条款之后它仍然在使用?也许有人有线索?
我认为开发人员中心示例代码中可能存在错误 查找和替换 Word 文档中的文本。
简而言之,它通过不调用FlatDocument
类中的基础FileStream
Dispose
来保持文件句柄打开。这看起来很奇怪,因为您会认为Package.Dispose
会清理这个手柄,但事实并非如此。
如果您修改 FlatDocument
类中的代码(如我在下面所做的那样(,它应该修复它
在构造函数中
private Stream _stream; // Add this
public FlatDocument(Stream stream)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
_stream = stream; // Add this
documents = XDocumentCollection.Open(stream);
ranges = new List<FlatTextRange>();
CreateFlatTextRanges();
}
处置中
public void Dispose()
{
documents.Dispose();
_stream.Dispose(); // Add this
}