c# - 检测目录中的更改

标签 c# scripting filesystems directory monitor

我需要监控文件夹及其子目录以进行任何文件操作(添加/删除/重命名)。我读过 FileSystemWatcher 但我想监视每次程序运行或用户按下“检查更改”按钮之间的更改(FSW 似乎更倾向于运行时检测)。我的第一个想法是遍历所有(子)目录并对每个文件进行哈希处理。然后,连接所有散列(已排序)并对其进行散列。当我想检查更改时,我重复该过程并检查哈希值是否相同。

这是一种有效的方法吗? 此外,一旦检测到更改,我如何尽快找出添加、删除或重命名的文件?

附带说明一下,如果脚本速度更快,我不介意使用脚本来执行此操作,只要这些脚本不需要最终用户安装任何东西并且脚本可以将更改通知我的 C# 应用程序。

最佳答案

我们通过将所有找到的文件及其最后修改时间存储在数据库中来处理此问题。

每次遍历文件时,我们都会检查每个文件的数据库:如果数据库中不存在,则为新文件;如果存在,但时间戳不同,则文件已更改。

还有一个选项可以通过在传递之前将数据库中的所有文件标记为 ToBeDeleteed 并在找到文件后清除它来处理已删除的文件。然后,在流程结束时,我们可以删除所有标记为 ToBeDeleted 的记录。

关于c# - 检测目录中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513858/

相关文章:

c# - SignalR 客户端每两秒重新连接到集线器

linux - 如何创建简单的 BASH 脚本,回显时间和日期

c++ - Fsync 太快?

linux - 我需要使用 sed 找到匹配项并删除该匹配项之前的 2 行和之后的 3 行

Windows 批处理脚本查找包含字符串或变量具有值的变量

macos - 使用硬链接(hard link)删除相同文件的重复数据

iphone - 在 iPhone 中读取和写入文件

c# - 双引用委托(delegate)

c# - 保存不为其关系公开外键属性的实体时出错

c# - 如何将表值参数从 .net 代码传递给存储过程