我对C#比较陌生。我目前正在学习哈希集,并了解哈希集不允许在哈希集中使用相同的元素。我的问题是我是否可以使用md5哈希对目录中的文件进行哈希处理并将它们存储在哈希集中,以便可以某种方式检查重复的哈希或文件?
答案 0 :(得分:2)
HashSet<T>
类是唯一元素的集合。 HashSet类的名称空间是 System.Collections.Generic 。它是在 .NET 3.5 中引入的。
以文件为例:
static void Main(string[] args)
{
HashSet<string> FileData = new HashSet<string>();
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead("C:\\FolderTest\\Document.txt"))
{
var hash = md5.ComputeHash(stream);
var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
FileData.Add(data);
}
using (var stream = File.OpenRead("C:\\FolderTest\\Document.txt"))
{
var hash = md5.ComputeHash(stream);
var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
FileData.Add(data);
}
using (var stream = File.OpenRead("C:\\FolderTest\\Document2.txt"))
{
var hash = md5.ComputeHash(stream);
var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
FileData.Add(data);
}
}
foreach (var file in FileData)
{
Console.WriteLine(file);
}
Console.ReadKey();
}
在上面的代码中,我们创建了一个简单的HashSet类型HashSet<string>
,并将字符串添加到其中。
鉴于以上所述,即使我们尝试添加重复的哈希数据字符串,也不会出现任何错误,但是在迭代集合时,我们找不到该字符串。
以后如何比较结果取决于您自己;你可以转换 例如,将字节数组设置为base64,或者直接比较字节。 (请注意,数组不会覆盖Equals。使用base64是 更容易上手,但如果您确实很有效 只对比较哈希值感兴趣。)see these answers
哈希集的特征:
HashSet<T>
添加元素时,它会自动增加
HashSet的容量。