使用 .NET Core 2.0 监视 Windows 上文件的更改

kus*_*men 2 c# file-monitoring .net-core

在您向我发送指向此处此处此处的链接之前,请耐心等待。

我想编写一个服务来监视给定文件集的更改,我从最简单的编写控制台应用程序开始,该应用程序监视目录以继续我的 POC。但是,我在尝试提取所做的实际更改时遇到了困难。(是的,我设法处理了FileSystemWatcher类中的事件,但就我看到的类的 API 而言,我无法跟踪实际更改)

你知道有没有办法做到这一点?也许没有那么多痛苦或不必要的操作。

我目前使用 .NET Core 2.0,但任何版本的 .NET Core 都可以。

编辑:我需要监视的文件是基于文本的,基本上我想实现git diff功能并报告更改。

Cor*_*rey 5

简短的回答是否定的,没有 API 会告诉您文件的哪一部分被修改。您可以从操作系统获得的只是文件发生更改的通知,而不是超出您从FileSystemWatcher.

要检测更改的性质,您需要能够比较更改前后的文件内容。在大多数情况下,您将无法访问文件的先前状态。您可以使用卷影副本来访问文件的先前状态,但这有其自身的问题。

如果您只监控少量文件,那么您可以进行某种指纹识别 - 例如块级散列 - 以检测更改的位置。你仍然需要一个 before 和 after 来检测特定的变化。

那说...

原则上可以连接到用于实际将数据写入磁盘的 Windows API。我还没有在 .NET 中尝试过这个,但我过去曾使用过Detours来做类似的事情。请注意 API 挂钩是危险的领域,如果您弄错了,您可能会杀死您的计算机。这里是龙。如果你想走这条路,我强烈建议你编写代码时着眼于最小化延迟。