当使用Java的单个文件存在多个符号链接(symbolic link)时,如何识别哪个链接修改了目标文件?我无法找到哪个文件修改了目标文件。
示例:D:\sample.txt,D:\folder1\sample.txt
;这两个是链接。目标文件位于E:\sample.txt
.
现在如何判断是否D:\sample.txt
或D:\folder1\sample.txt
修改了E:\sample.txt
?
最佳答案
How to identify which link modified the target file when multiple symbolic link exists for a single file using java?
这是不可能的。
这在任何编程语言中都是不可能的。
此功能必须得到操作系统的支持,而我遇到过的操作系统均不支持。
<小时/>有些启发式方法(使用时间戳)可能“在大多数情况下”都有效,但在每种情况下,启发式方法都不会给出答案,甚至会给出错误的答案。以下是一些令人困惑的问题:
使用简单的时间戳启发式:
如果任一符号链接(symbolic link)位于只读文件系统或未记录访问时间的文件系统(例如,取决于挂载选项),则不会,并且
如果在上次文件写入后在符号链接(symbolic link)上发生文件读取,则它将不起作用。
当您添加观察者时:
如果您当时没有“观看”(废话!),它就不会起作用,并且
如果您有太多观察者事件,并且您无法跟上,它将不起作用。
(此外,我认为您无法获取有关使用符号链接(symbolic link)的事件。因此您仍然需要检查符号链接(symbolic link)访问时间戳。这意味着只读文件系统等在这里是一个问题也是。)
还有这样的场景:
- 两个符号链接(symbolic link)都用于写入文件,
- 您不了解所有符号链接(symbolic link),或者
- 用于写入的符号链接(symbolic link)已被删除或“触及”。
这些可能超出了 OP 用例的范围。但它们与OP第一句提出的一般问题相关。
关于java - 符号链接(symbolic link)的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835230/