2

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

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

你知道是否有办法这样做吗?也许没有那么多痛苦或不必要的手术。

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

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

4

1 回答 1

5

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

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

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

那就是说...

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

于 2017-11-17T04:21:24.483 回答