0

我需要监视文件的更改并查看它的确切修改位置。

似乎我不能使用 FileSystemWatcher,因为我只收到文件已被修改的通知,但我无法确切知道发生了什么变化,并且在引发事件后存储文件的副本以进行差异是不可行的,因为文件真的很大。

我想在他们的 Process Monitor 软件上实现类似 SysInternals 的东西,它告诉我们,对于 WriteFile 事件,文件的修改部分给定了偏移量和长度。

我读到有一个 Windows API 可以做到这一点,但我找不到任何关于如何或从哪里开始在 .net 3.5 应用程序上实现它的信息。

4

2 回答 2

1

根据我的调查,.NET 平台提供了这个事件来处理文件更改事件。但是,仅此一项不会让您知道文件的哪一部分已更改。

您需要在某处存储文件的副本,以便在文件更改时与文件进行比较,然后在比较完成时更新该副本。这是一个非常基本的解决方案,如果文件太大,效率会非常低。

于 2019-01-13T17:34:34.773 回答
0

使用 FileSystemWatcher 您可以订阅更改的事件ChangedEvent

FileSystemEventArgs 包含一个可以传递给FileInfo的属性 FullPath 。这将为您提供一些基本的文件信息,例如可以将其存储到数据库中。您可以通过这种方式保留文件更改的历史记录。

如果您需要比较文件的内容,则更具挑战性,并且方法会因文件类型而异。

于 2019-01-13T18:47:13.333 回答