【发布时间】:2010-11-13 17:43:24
【问题描述】:
我必须在一些机器上同步大文件。文件最大可达 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);
}
}
问题在于运行时:
- 使用 SHA256 和 1,6 GB 文件 -> 20 分钟
- 使用 MD5 和 1,6 GB 文件 -> 6.15 分钟
是否有更好更快的方法来获取校验和(可能使用更好的哈希函数)?
【问题讨论】:
-
您真的需要检查校验和吗?你是如何复制文件的?如果你在 Windows 上,我会使用最新版本的 Robocopy ...
-
很好的提示,如果两个候选文件之间的文件大小不同stackoverflow.com/a/288756/74585
标签: c# .net large-files checksum