FileSystemWatcher监视的文件最近打开后改变事件未触发

3
我在Windows表单应用程序中实现了FileSystemWatcher。当我第一次打开一个文件(比如pdf-1)时,Changed事件可以正常工作。但是当我在短时间内第二次打开同一个文件时,Changed事件不会触发。但是当我打开另一个文件(比如pdf-2)时,它会触发。如果我在一段时间后(比如1或2个小时)再次打开第一个文件(pdf-1),则Changed事件仍会触发。
我将InternalBufferSize设置为16KB,使用的NotifyFilters包括LastAccess、LastWrite、FileName和DirectoryName。
我无法找出问题所在。有人能帮我吗?

1
我怀疑由于文件最近被打开,它仍然在RAM缓存中。因此,当您第二次打开它时,实际上并不涉及文件系统。我可能完全错了,但请尝试明确检测文件何时被打开,而不仅仅是在文件系统中发生更改时。这可能会有所不同。或者,完全可能是其他人需要建议的其他原因。 - Russell Uhl
1
请查阅此处获取有关NTFS将最后访问时间延迟一小时的信息:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290%28v=vs.85%29.aspx - HABO
@RussellUhl 是的,我也猜到了同样的原因。但我不确定,也不知道如何清除 RAM 缓存/操作系统缓存中的文件。 - Krishna Teja
@HABO 那么,在C#中有没有避免最后访问延迟的方法? - Krishna Teja
使用更符合您喜好的文件系统(虽然我不知道立即可用的文件系统),或编写自己的文件系统。由于NTFS在一小时内对于多次访问不更新文件头,因此无法通过轮询来解决它。如果访问文件的应用程序都是您自己的,则可以修改它们以生成通知,但这似乎在PDF文件中不太可能。 - HABO
@HABO 感谢您的回复。在NTFS中减少延迟不可能吗?除了编写自己的文件系统之外,我该如何解决这个问题?我需要在NTFS中实现它。 - Krishna Teja
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接