【发布时间】:2020-06-15 09:06:56
【问题描述】:
我压缩完全相同的文件,但哈希比较(尝试 MD5 和 SHA256)是不同的。我读到无法比较 zip 文件,因为它们在用相同的文件再次压缩后总是有所不同。 我能做些什么来创建相同的档案?
压缩
private string CreateZip(string path)
{
var targetPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" +
RandomString() + ".zip";
ZipFile.CreateFromDirectory(path, targetPath, CompressionLevel.Optimal, true);
return targetPath;
}
散列
static string CalculateMD5(string filename)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filename))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
【问题讨论】:
-
"我读到无法比较 zip 文件,因为它们总是不同" - 你在哪里读到的?我只是在这里猜测,问题很可能是如果一件小事发生变化,最后访问的时间戳等,那么它们将不会有相同的哈希
-
不,我立即将它们压缩两次,甚至没有应用程序触及文件。我确定是因为 zip 压缩。
-
您正在触摸它们,获取文件的句柄,使用 win32 api 打开它们,这可能会破坏时间戳......再次,只是猜测
-
读不写,所以时间戳可能是?
-
上次访问时间戳显示上次访问 NTFS 卷上的每个文件和文件夹的更新时间。再一次,只是一个猜测,但很有可能。如果这是问题所在,那么您可以将上次访问时间设置为诸如 unix epoch 或您的狗的生日之类的东西,它可能会起作用