c# – 通过计算MD5获取重复文件列表
发布时间:2020-12-15 06:09:27 所属栏目:百科 来源:网络整理
导读:我有一个包含文件路径的数组,我想列出那些基于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 fil
我有一个包含文件路径的数组,我想列出那些基于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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |