我需要在几台机器之间同步大文件。这些文件的大小可以达到6GB。同步将手动进行,每隔几周进行一次。由于文件名可能随时更改,因此无法考虑文件名。
我的计划是在目标PC和源PC上创建校验和,然后复制所有具有校验和但尚未存在于目标位置的文件到目标位置。我的第一次尝试类似于:
using System.IO;
using System.Security.Cryptography;
private static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
问题出在运行时间:
- 对于一个1.6 GB的文件使用SHA256 -> 20分钟
- 对于一个1.6 GB的文件使用MD5 -> 6.15分钟
有没有更好、更快的方法来获取校验和(也许是使用更好的哈希函数)?