`struct fileMd5 { public List<string> files; public int count; }
class Program
{
static Dictionary<string, fileMd5> m_picCount = new Dictionary<string, fileMd5>(1024 * 1024);
static long m_index = 0 ;
static void Main(string[] args)
{
string filePath = @"E:\jusbao\WebRoot\photo";
Console.WriteLine(@"请输入图片目录:(默认为 E:\jusbao\WebRoot\photo)" );
string input = Console.ReadLine();
if( input != "" )
filePath = input;
查找图片MD5(filePath);
Console.WriteLine("处理结束,共有图片数:" + m_index + " ,不重复数:" + m_picCount.Count);
}
static void AddToDict( string md5, string fileName )
{
m_index++;
if (m_index > 0 && m_index % 100 == 0)
Console.WriteLine("当前处理图片数:" + m_index + " ,不重复数:" + m_picCount.Count);
if (!m_picCount.ContainsKey(md5))
{
fileMd5 fm = new fileMd5();
fm.count = 0;
fm.files = new List<string>();
m_picCount.Add(md5, fm);
}
{
fileMd5 fm = m_picCount[md5];
fm.files.Add(fileName);
fm.count++;
m_picCount[md5] = fm;
}
}
private static void 查找图片MD5(string filePath)
{
string[] dirs = Directory.GetDirectories(filePath);
foreach (string s in dirs)
{
查找图片MD5(s);
}
string[] files = Directory.GetFiles(filePath);
foreach (string s in files)
{
string md5 = GetMD5HashFromFile(s);
AddToDict(md5, s);
}
}
private 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);
}
}`