如何检查生成的文件是否已在Eclipse插件开发中修改?

时间:2014-11-05 02:16:16

标签: eclipse eclipse-plugin generated-code

目前该插件将在IProject中生成一系列文件,我需要检查生成的文件是否已被用户修改过。如果生成的工件已被用户修改,我将需要以不同方式处理再生。

我能想到的是检查创建日期==修改日期。我将删除旧文件并在用户之前未触摸该文件时再次创建它以确保创建日期始终等于修改日期。但是我没有看到如何从IFile中检索这两个属性。有人可以帮我这个吗?

我对Eclipse插件开发很陌生,有人可以提出另一种解决方法吗?

***生成的文件无法锁定,因为这些是源代码

2 个答案:

答案 0 :(得分:1)

可以使用IFile获取IResource或更多getModificationStamp()的修改标记。返回值不是严格意义上的时间戳,但可以满足您的需求,有关详细信息,请参阅JavaDoc

但是,如果您想跟踪文件内容是否已更改,我宁愿计算内容的哈希值,例如使用MessageDigest。然后,您可以比较两个哈希值以确定文件是否已更改。

如果文件被更改,则后一种方法会将文件视为未更改 - 已保存 - 已还原的更改 - 再次保存。另一方面,修改标记会将文件声明为已更改,即使其内容再次相同。

无论您选择哪种方法,都可以使用IResource#setPersistentProperty()在生成时存储修改标记(或内容哈希),然后将其与当前修改标记进行比较。持久属性使用平台元数据存储在磁盘上,并在平台关闭和重新启动时进行维护。

答案 1 :(得分:0)

我找到了答案:

private boolean isModified(IFile existingFile) throws CoreException {
  IFileState[] history = existingFile.getHistory(NullProgessMonitor);
  return history.length > 0;
}

此功能由eclipse IDE维护,因此它将在eclipse重启后继续存在。如果已创建文件而未进行修改,则历史状态为零。

您可以通过以下方式清除当地历史记录:

existingFile.clearHistory(NullProgessMonitor);