如何刷新目录作为修复FileSystemWatcher的方法

Pay*_*aya 5 .net c# windows filesystemwatcher

正如所示这篇文章,FileSystemWatcher是不可靠的,因为Windows磁盘缓存的.海报显示,无论优化和InternalBufferSize如何,该类错过了大约0.15% - 0.35%的所有事件.即使是驱动程序也会受此影响,因此它本身并不是FileSystemWatcher的错误.

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

有没有.NET方法来刷新目录或指定的文件(未打开)?我的意思是真正的刷新,它等待磁盘本身的确认.例如,FileStream.Flush(无效),刷新刚刚在.NET的缓冲区,而不是OS缓冲(不像FileStream.Flush(布尔)真正的参数在.NET 4和更好).我想刷新其他应用程序打开的文件.

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