2

我正在尝试获取存储在 Windows Azure Blob Store 中的文件的哈希值。

我希望然后将哈希与存储在本地计算机上的版本进行比较,看看是否有区别。

以下代码获取哈希。

        _CloudBlobClient = SetupCloudBlobClient();
        CloudBlobContainer cbContainer = _CloudBlobClient.GetContainerReference(sContainer);
        CloudBlockBlob cbBlob = cbContainer.GetBlockBlobReference(sBlob);

        BlobStream stream = cbBlob.OpenRead();
        StringBuilder sb = new StringBuilder();

        MD5 md5 = MD5CryptoServiceProvider.Create();
        byte[] hash = md5.ComputeHash(stream);
        foreach (byte b in hash)
            sb.Append(b.ToString("x2"));

        return sb.ToString();

问题是这对小文件很有效,但我正在处理大于 100MB 的文件,而对于这些文件,服务需要的时间太长,最终会超时。

我想知道这是否是正确的方法,或者是否有另一种方法来确定两个文件是否包含相同的数据,这对于大文件来说会更快。

谢谢,马特

4

2 回答 2

3

如果我没记错的话,问题是您在这里下载整个文件:

byte[] hash = md5.ComputeHash(stream);

这就解释了为什么这在大文件上会变得非常慢并且可能作为解决方案不可行 - 我没有任何完美的选择,但一个想法是只生成 MD5 哈希,即在前 5 KB 数据上并另外比较文件大小 - 如果两者都匹配,则假设它们相同。

于 2011-04-04T04:14:07.150 回答
0

也许你可以采取另一种方法。每次存储和/或覆盖新文件时,请在任何地方(数据库、另一个相关文件……)保留版本号。在本地获取文件时,也获取此版本,因此很容易比较。当然我不知道你的系统,所以也许这根本不可能......

于 2011-04-04T04:28:28.250 回答