我有一个包含文件路径的数组,我想列出那些基于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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从上面我能够计算他们的MD5,但是如何只获得那些重复的文件的列表.如果还有其他方法可以让我知道,我也是Linq的新手
Raw*_*ing 11
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);
Run Code Online (Sandbox Code Playgroud)
4.您可以使用嵌套foreach循环访问组,例如:
foreach(var group in groupsOfFilesWithSameHash)
{
Console.WriteLine("Shared MD5: " + g.Key);
foreach (var file in group)
Console.WriteLine(" " + file);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |