5

如本文所示,由于 Windows 磁盘缓存FileSystemWatcher它是不可靠的。海报显示,无论优化和InternalBufferSize如何,该类都错过了大约 0.15% - 0.35% 的所有事件。即使是驱动程序也会受到这种影响,因此它本质上不是 FileSystemWatcher 的错误。

海报提出了一种解决这个问题的方法——冲洗整个卷。但是我不想这样做 - 缓存是有原因的,它需要管理员权限。是否可以只刷新被监视的目录并达到使 FileSystemWatcher 100% 准确的相同结果?我对FlushFileBuffers了解不多,但海报的解决方案专门刷新整个卷,即使仅刷新目录显然是更好的解决方案。

是否有任何 .NET 方法来刷新目录或指定文件(未打开)?我的意思是真正的 flush,它等待磁盘本身的确认。例如,FileStream.Flush(void)仅刷新 .NET 缓冲区,而不是 OS 缓冲区(与.NET 4 和更好的具有true参数的FileStream.Flush(bool)不同)。我想刷新其他应用程序打开的文件。

如果没有,是否甚至可以使用 FlushFileBuffers 刷新目录(也许它只支持文件和卷,但这会很奇怪)?非管理员解决方案也非常理想,因为在管理员模式下我可以只使用更改日志。

4

0 回答 0