我们在本地网络的系统中有许多文件(word、excel)。我们每天都从这些文件中获取备份。现在我想知道:文件是否与备份不同?例如,假设我们有一个文件“test.docx”,它的备份名称是“test_backup.docx”,我想知道用户是否对“test.docx”进行了任何更改?我想比较这两个文件。
一种方法是逐字比较这些文件,当检测到差异时,我们可以得出文件已更新的结论。
现在我的问题是,是否有任何其他方式(例如校验和)来检测这种差异?并且通过这种方法我可以找到更新发生在哪里?
谢谢。
以下是我们计算文件签名的方法:
public static string Signature(this FileInfo input)
{
MD5CryptoServiceProvider cryptoTransform = new MD5CryptoServiceProvider();
FileStream fs = new FileStream(input.FullName, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
byte[] data = reader.ReadBytes((int)fs.Length);
string hash = BitConverter.ToString(cryptoTransform.ComputeHash(data)).Replace("-", "");
reader.Close();
fs.Close();
return hash;
}
然后,我们根据先前版本的签名计算该签名以检测更改。
你见过同步玩具吗?
听起来您想自动化备份复制过程,而您并不真正关心特定差异,只是试图确定是否有任何差异。我的回答是基于这个假设。
散列是确定文件是否真的应该备份的好方法,但它需要读取整个文件并对其执行昂贵的任务。
您可以通过查看文件的大小和时间戳来预处理备份文件列表 - 已修改、已访问:如果它们不匹配 - 无需校验和即可备份。如果它们匹配,那么您可以假设它们相同或对内容进行哈希处理,如果所有时间戳和大小都与备份副本匹配并且如果这种启发式方法被证明是错误的,我会首先尝试假设它们相同 - 诉诸哈希,但是找到可能的最快算法- 您的哈希应用似乎不需要高安全性而是高性能,SHA 和 MD5 都将是一个过大的性能可怕的性能