2012-09-19 42 views
1

我有两个应用程序引用相同的XML文件。一个写入文件,其他监视器更改为该文件。访问文件引发更改事件

在应用程序1中,我使用FileSystemWatcher来监视更改,将过滤器应用为LastWrite并仅查看更改事件。它在后台连续运行

应用程序2在启动时读取文件中的特定节点并在用户方向上更新该节点。它是一个简单的窗体,在执行时从文件中读取值,并且具有更改该值的功能

运行这两个应用程序时遇到的奇怪事情是,当应用程序2启动时,文件更改事件是在应用程序1提高(注:申请1汽车无手表文件)

我想摆脱的变化情况提高应用1,当应用程序2个启动的。

过滤器不正确或更改事件表现不好吗?

+0

您详细说明了应用程序2读取但具有更改该值的功能。那是什么意思?这是否意味着您打开具有读/写权限的文件? –

+0

它是一个XML文件。因此,使用XMLDocument Load方法加载它,然后使用SelectSingleNode读取适当的节点。我不确定是否以写入模式打开文件。 – user1473039

+0

嗯,很难分辨。您可以尝试将文件加载到“MemoryStream”中,并使用“XmlDocument.Load(Stream)”查看通知是否消失。 –

回答

1

此行为是documented

更改时的大小,系统 属性,最后写入时间,最后访问时间,或者安全权限在文件或目录的 所做的Changed event提高目录被监控。

如果应用程序2打开文件并且操作系统跟踪上次访问时间,则会引发Changed事件。由于没有过滤器只能过滤那些实际将数据写入文件的事件,因此必须通过在应用程序1上保留状态来确定发生了什么。

例如,现在您知道发生了什么,您可以保留缓存的last write time,并决定忽略该事件,如果没有改变。

+0

感谢您的信息。但上次写入时间似乎并不可靠。有一件令我感到困扰的事情是,application2上的操作非常快,即用户打开application2并立即更改值。这会导致在应用程序1中快速连续触发两个更改事件。因此,应用程序1会得到一个异常“无法打开文件,因为它正在被另一个进程使用”。我认为在阅读文件时我需要更好的锁定方法。 – user1473039