95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
using LightSetupBase;
|
|
using LightSetupMd5;
|
|
using System.Text;
|
|
using System.Security.Cryptography;
|
|
using System.Collections.Generic;
|
|
using System;
|
|
|
|
namespace LightSetupMd5
|
|
{
|
|
internal class Md5Release
|
|
{
|
|
public string GetMd5(Md5MainArgs arg, List<FileInfo> fileInfos)
|
|
{
|
|
List<Md5FileInfo> fileInfo = new List<Md5FileInfo>();
|
|
foreach (FileInfo file in fileInfos)
|
|
{
|
|
fileInfo.Add(new Md5FileInfo(Md5(file), getFilePath(arg, file)));
|
|
}
|
|
return filesToMd5(fileInfo);
|
|
}
|
|
|
|
private string Md5(FileInfo file)
|
|
{
|
|
try
|
|
{
|
|
MD5 md5 = new MD5CryptoServiceProvider();
|
|
byte[] retVal;
|
|
|
|
using (FileStream fileStream = file.OpenRead())
|
|
{
|
|
retVal = md5.ComputeHash(fileStream);
|
|
fileStream.Close();
|
|
}
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < retVal.Length; i++)
|
|
{
|
|
sb.Append(retVal[i].ToString("x2"));
|
|
}
|
|
string fileMd5 = sb.ToString();
|
|
|
|
Console.WriteLine("文件" + file.FullName + "的md5值为" + fileMd5);
|
|
|
|
return fileMd5;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private string getFilePath(Md5MainArgs arg, FileInfo file)
|
|
{
|
|
return file.FullName.Substring(arg.RunPath.Length);
|
|
}
|
|
|
|
private string filesToMd5(List<Md5FileInfo> fileInfo)
|
|
{
|
|
//升序
|
|
fileInfo.Sort((a, b) => (a.Md5 + a.AbsolutePath).CompareTo(b.Md5 + b.AbsolutePath));
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (Md5FileInfo file in fileInfo)
|
|
{
|
|
if (sb.Length > 0)
|
|
{
|
|
sb.Append(":");
|
|
}
|
|
sb.Append(file.Md5);
|
|
sb.Append("_");
|
|
sb.Append(file.AbsolutePath);
|
|
}
|
|
string md5 = textMd5(sb.ToString());
|
|
|
|
Console.WriteLine("整个目录的md5值为:" + md5);
|
|
|
|
return md5;
|
|
}
|
|
|
|
private string textMd5(string text)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
|
|
{
|
|
byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
|
|
int length = data.Length;
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
sb.Append(data[i].ToString("x2"));
|
|
}
|
|
return (sb.ToString());
|
|
}
|
|
}
|
|
}
|
|
} |