检测位置文件中的更改

Posted

技术标签:

【中文标题】检测位置文件中的更改【英文标题】:Detect changes within file at location 【发布时间】:2013-11-14 01:08:51 【问题描述】:

我知道可以检测文件的更改,例如使用 Linux inotify 服务或 Java 7 WatchService 之类的东西。

但是,我想做的不仅是检测文件是否已更改,还要检测文件中发生更改的位置。

我认为没有任何现有的操作系​​统服务或本地语言 API 可以实现这一点(也许我错了),所以我想知道是否有人可以提供任何建议。

例如,让我们从一个 1MB 的文件开始,它可以在任何给定的文件偏移量处随机更改。任何人都可以就尝试监视文件的更改以及确定文件中发生更改的位置提供任何建议。

任何意见或建议将不胜感激。

谢谢

【问题讨论】:

不要认为java.io 或操作系统提供任何类似的服务。您必须阅读并比较整个文件。也许将文件分成多个段并比较 md5sum 摘要会是吸气剂。 难道不需要保存一份文件副本,可以与更改后的文件进行比较,看看有什么不同吗? 如何检查你的文件到 git 并在你想知道它是否改变时执行git statusgit diff 会告诉你具体发生了什么变化——假设它是一个文本文件 我猜 git 只能对文本文件执行此操作,而不是二进制文件? 【参考方案1】:

保留文件的 2 个副本并使用 OS 监视器监视主要的副本,当它触发时使用备份执行二进制差异(它是二进制文件吗?) - 请参阅此处了解二进制差异方法 https://superuser.com/a/125408

【讨论】:

是二进制文件。这对于小文件应该可以,但我认为它不会很好地扩展。假设文件的大小是否为千兆字节左右。好主意!

以上是关于检测位置文件中的更改的主要内容,如果未能解决你的问题,请参考以下文章

检测流浪客机器中的文件更改

检测文本字段中的位置和变化

IntelliJ和SVN:提交时“未检测到任何更改”

无需轮询即可检测 PHP 中的文件更改

使用没有无限循环的 C++ i 检测文本文件中的更改?

为啥 docker build 中的 COPY 未检测到更新