123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading;
- using hirdParty.DownloadSystem;
- using ThirdParty.DownloadSystem;
- using UnityEngine;
- public class CheckFileThran
- {
- private Thread _thread;
- private string rootPath;
- public List<MD5FileInfo> shiBaiFile = new List<MD5FileInfo>();
- public int count;
- public bool isEnd;
- public CheckFilePool CheckFilePool;
- public System.Action OnClick;
- public void Start(string dPath, CheckFilePool CheckFilePool)
- {
- this.CheckFilePool = CheckFilePool;
- this.rootPath = dPath;
- _thread = new Thread(UpdateThread);
- _thread.Start();
- shiBaiFile.Clear();
- }
- public void Close()
- {
- _thread = null;
- OnClick = null;
- }
- private void UpdateThread()
- {
- while (_thread != null)
- {
- // for (int i = 0; i < md5FileInfos.Count; i++)
- {
- if (_thread == null)
- {
- break;
- }
- try
- {
- MD5FileInfo bdMd5File = null;
- lock (CheckFilePool.CheckFile)
- {
- if (CheckFilePool.CheckFile.Count > 0)
- {
- bdMd5File = CheckFilePool.CheckFile[0];
- CheckFilePool.CheckFile.Remove(bdMd5File);
- }
- }
- if (bdMd5File == null)
- {
- break;
- }
- if (bdMd5File.size <= 0)
- {
- continue;
- }
- if (bdMd5File.fileName.Contains("MD5"))
- {
- continue;
- }
- count++;
- string dPath = rootPath + bdMd5File.fileName;
- if (!File.Exists(dPath))
- {
- // Debug.Log("文件不纯在"+ dPath);
- shiBaiFile.Add(bdMd5File);
- }
- else
- {
- string md5 = FileMD5(dPath);
- if (!bdMd5File.md5.Equals(md5))
- {
- Debug.Log("MD5校验失败" + dPath);
- shiBaiFile.Add(bdMd5File);
- }
- }
- Thread.Sleep(1);
- }
- catch (Exception e)
- {
- Debug.LogError("MD5校验失败" + e);
- }
- }
- }
- isEnd = true;
- OnClick?.Invoke();
- }
- public static string FileMD5(string filePath)
- {
- byte[] retVal;
- using (FileStream file = new FileStream(filePath, FileMode.Open))
- {
- MD5 md5 = new MD5CryptoServiceProvider();
- retVal = md5.ComputeHash(file);
- }
- return ByteArrayToString(retVal);
- }
- public static string ByteArrayToString(byte[] ba)
- {
- StringBuilder hex = new StringBuilder(ba.Length * 2);
- foreach (byte b in ba)
- {
- hex.AppendFormat("{0:x2}", b);
- }
- return hex.ToString();
- }
- public string GetMD5HashFromFile(byte[] data)
- {
- try
- {
- // FileStream file = new FileStream(filename,FileMode.Open);
- System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
- byte[] retVal = md5.ComputeHash(data);
- // StringBuilder sb = new StringBuilder();
- StringBuilder hex = new StringBuilder(retVal.Length * 2);
- foreach (byte b in retVal)
- {
- hex.AppendFormat("{0:x2}", b);
- }
- return retVal.ToString();
- }
- catch (System.Exception ex)
- {
- Debug.Log("错误信息:" + ex);
- return null;
- }
- }
- }
|