散列文件

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
我目前正在与ASP.NET一起实施Google Drive Rest API的项目。此项目的执行方式类似于基本的重复数据删除,借此将检测到Google驱动器中的重复文件,并且不允许将其上传。因此,为了执行此操作,我需要对文件进行哈希处理,如果文件中存在相同的哈希值,则将该文件视为重复项。但是我一直在寻找教程和文档,但是我有点迷失了。如果我想对文件进行哈希处理并比较类似哈希表中的相同哈希值,应该如何解决此问题。什么样的方法呢?我只需要一种方法来解决这个问题。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
Then once you have a hash value, you throw that into a data structure that lets you do quick look ups. You could use the HashSet that comes built into .NET Framework, or you could build your own data structure. If you have tons and tons of files already in Google Drive, then implementing a Bloom filter in front of your lookup may help speed things up -- but that is an optimization for later.

首先使它工作。然后使其正常工作。然后最后考虑使其快速运行。
 

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
好的,谢谢您的链接。我设法使md5正常工作。而且我想知道如何将文件的此哈希功能与Google Drive Rest API集成在一起。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
他已经在#3上告诉过您-Bloom过滤器不会在C#领域中泛滥成灾,尽管它们在C ++中更常见。它们只是.Contains()方法的更高级版本,带有一些附加功能。首先对它们进行快速搜索,以了解它们的含义,然后我建议您搜索Codeplex或Codeproject或Github平台以获取一些代码,但请注意不要侵犯任何许可证,因为大多数用C#编写的Bloom过滤器都是由其原始作者授权。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
My recommendation is try things with a HashSet first. See if it is fast enough.

我看不到如何将其与Google Drive REST API集成的问题。感觉就像您要我们为您设计项目。如果是这样,这是一个幼稚的设计:
C#:
Init:
while (files available in Google Drive)
    download file data from Google Drive.
    compute hash file data
    put hash in data structure

OnFileUploadAttempt:
compute hash of file to be uploaded
if data structure does not contains hash
    upload file
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
.Net框架中的字典是作为基于Hash表的概念而构建的,因此牢记这一点:我可能会使用字典<T-key, T-value> like <hash, filename>或类似的东西。这是保持哈希值堆积的好方法。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
是的,但他实际上并不需要重复文件的名称。他在原始帖子中所说的只是,如果哈希匹配,他需要阻止上传。他没有说必须告诉用户Google云端硬盘中已匹配的文件。
 

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
我不是在寻找直接的答案,而是想了解我应该如何解决这个问题。由于google drive api文档不是那么有用,并且我对C#还是很陌生,这就是为什么我仍然不熟悉它。基于伪代码,看来我应该解决我的问题的方式是:首先,我生成文件的哈希值,在这种情况下,我正在使用md5哈希。然后将这些哈希存储在哈希集中。在能够存储在哈希集中之前,程序将检查哈希集以确定是否存在文件的现有哈希值。如果不是,请上传到Google驱动器,并将哈希值存储在哈希集中。如果存在重复,则只需告知用户存在重复文件,他/她需要上传另一个文件。这就是我应该如何解决我的问题吗?我仍然在阅读和理解哈希集。
 

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
因此,从到目前为止我可以从哈希集推论得出的结果来看,哈希集中基本上不可能存在两个相同的元素,是吗?意味着以某种方式,如果哈希集中已经存在文件的哈希,就不可能有dedup哈希?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果您仍然处于C#的学习曲线上,则该项目可能不是您首先要解决的项目,因为您有多个学习曲线需要同时攀升:
1)数据结构与算法
2) C#
3)C#内置的数据结构
4)Google Drive API。
5)OAuth
 

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
这个项目是分配给我的,因此唯一的方法就是学习困难的方法,这就是为什么我试图将问题分解为子问题。如何将文件的md5哈希值存储在哈希集中,以比较相似的哈希值。我很清楚,哈希集将无法具有重复的哈希。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
您拥有多少计算机科学或计算机工程背景?如果没有,您是否至少自学了一些基本的数据结构和算法?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
看看 文件资料 for HashSet. You'll see all kinds of methods and properties. You may even find some sample code there. :)
 
Last edited:

杰森·彭

知名会员
已加入
2019年8月13日
留言内容
46
编程经验
Beginner
我来自计算机取证背景。早在我上大学时,我们就学习了Java结构,链接列表,数组。基本上是一些与Java有关的数据结构。但与哈希无关
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
因此,您学习了一点Java,但并没有什么不同,因此请深入学习,如果遇到困难,请发回。跳伞运动员发布的链接看起来像是一个很好的参考指针。 ;)
 
最佳 底部