gpt4 book ai didi

c# - 通过计算它们的 MD5 获取重复文件列表

转载 作者:太空狗 更新时间:2023-10-29 21:02:06 26 4
gpt4 key购买 nike

我有一个包含文件路径的数组,我想根据它们的 MD5 列出那些重复的文件。我这样计算他们的 MD5:

private void calcMD5(Array files)  //Array contains a path of all files
{
int i=0;
string[] md5_val = new string[files.Length];
foreach (string file_name in files)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(file_name))
{
md5_val[i] = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower();
i += 1;
}
}
}
}

从上面我可以计算出它们的 MD5 但如何只获取那些重复文件的列表。如果有任何其他方法可以做到这一点,请告诉我,而且我是 Linq 的新手

最佳答案

1.重写你的 calcMD5接收单个文件路径并返回 MD5 的函数。
2.将文件名存储在 string[] 中或 List<string> ,如果可能的话,不是无类型数组。
3.使用以下 LINQ 获取具有相同哈希值的文件组:

var groupsOfFilesWithSameHash = files
// or files.Cast<string>() if you're stuck with an Array
.GroupBy(f => calcMD5(f))
.Where(g => g.Count() > 1);

4.您可以进入带有嵌套 foreach 的组循环,例如:

foreach(var group in groupsOfFilesWithSameHash)
{
Console.WriteLine("Shared MD5: " + g.Key);
foreach (var file in group)
Console.WriteLine(" " + file);
}

关于c# - 通过计算它们的 MD5 获取重复文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com