using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ConsoleApplication7
{
class Program
{
public static Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
static void Main(string[] args)
{
string folderPath = @"D:\Temp";
DirectoryInfo di = new DirectoryInfo(folderPath);
FileInfo[] fi = di.GetFiles();
foreach (FileInfo f in fi)
{
string md5 = GetMD5HashFromFile(f.FullName);
if (dic.Keys.Contains(md5))
{
List<string> list = dic[md5];
list.Add(f.FullName);
dic[md5] = list;
}
else
{
List<string> list = new List<string>();
list.Add(f.FullName);
dic.Add(md5, list);
}
}
foreach (string d in dic.Keys)
{
List<string> list = dic[d];
if (list.Count > 1)
{
Console.WriteLine("----------" + d + "------------");
int sign = 1;
foreach (string str in list)
{
Console.WriteLine(str);
if (sign != 1)
{
File.Delete(str);
}
sign++;
}
Console.WriteLine("----------------------------------------------------");
Console.WriteLine();
}
}
}
public static string GetMD5HashFromFile(string fileName)
{
try
{
FileStream file = new FileStream(fileName, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
catch (Exception ex)
{
throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}
}
}