check 2文件校验和,用于检测它们之间的任何差异
本文关键字:之间 任何差 检测 文件 校验和 用于 check | 更新日期: 2023-09-27 17:58:02
我们在本地网络上的系统中有许多文件(word、excel)。我们每天都从这些文件中得到备份。现在我想知道:一个文件和它的备份是否不同?例如,假设我们有一个文件"test.docx",它的备份名称是"test_backup.docx"?我想比较一下这两份文件。
一种方法是逐字比较这些文件,当检测到差异时,我们可以得出文件已更新的结论。
现在我的问题是,有没有其他方法,比如支票和,来检测这种差异?用这个方法我能找到更新发生在哪里吗?
谢谢。
你看过SyncToy吗?
听起来你想自动化备份复制过程,但你并不真正关心具体的差异,只是想确定是否存在差异。我的回答是基于这个假设。
哈希是一种很好的方法,可以确定文件是否应该真的备份,但它需要读取整个文件并对其执行昂贵的任务。
您可以通过查看文件的大小和时间戳来预处理备份文件列表-修改、访问:如果它们不匹配-在没有校验和的情况下进行备份。如果它们匹配,那么就由你来假设它们是相同的,或者对内容进行哈希处理。如果所有时间戳和大小都与备份副本匹配,我会先假设它们是一样的,如果这种启发式方法被证明是错误的——采用哈希处理,但要找到尽可能快的算法——你的哈希应用似乎不需要高安全性,而是需要高性能,SHA和MD5都是一种过度使用,具有糟糕的性能
以下是我们如何计算文件的签名:
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;
}
然后,我们根据以前版本的签名来计算该签名,以检测更改。