c# – 通过计算MD5获取重复文件列表

前端之家收集整理的这篇文章主要介绍了c# – 通过计算MD5获取重复文件列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含文件路径的数组,我想列出那些基于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.如果可能,将文件名存储在字符串[]或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#相关文章