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

标签 c# .net-core file-monitoring

在您向我发送 here 的链接之前, here也许here请耐心等待。

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

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

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

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

最佳答案

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

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

如果您只监视少量文件,那么您可以进行某种指纹识别(例如 block 级哈希)来检测更改的位置。您仍然需要之前和之后来检测特定的更改。

也就是说...

原则上可以连接到用于实际将数据写入磁盘的 Windows API。我还没有在.NET 上尝试过这个,但我用过 Detours过去也做过类似的事情。请注意,API Hook 是一个危险的领域,如果出错,您的计算机可能会崩溃。这里有龙。如果您想走这条路,我强烈建议您在编写代码时着眼于最大限度地减少延迟。

关于c# - 使用 .NET Core 2.0 监视 Windows 上文件的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47341232/

相关文章:

java - vfs2 DefaultFileMonitor 线程提前终止

c# - 具有功能的 Polly 重试策略不等待结果

azure - 克服 CosmosDB 20GB 逻辑分区大小

python - 监视文件的追加并在追加完成后执行一些操作

cocoa - 保存文件后文件监视器停止

c# - 当属性确实存在时,EntityEntry.Property() 抛出 InvalidOperationException

c# - 自定义 UITableViewCell : First Row Has No Content

c# - ASP.NET C# GridView 选项卡索引问题

c# - InvalidOperationException - 对象当前正在别处使用

c# - 如何在IdentityServer4中添加角色到声明?