| using UnityEngine;  | 
| using System.IO;  | 
|   | 
| namespace StartAot  | 
| {  | 
|     public class AssetVersion  | 
|     {  | 
|         //参考文本 logicbytes/Assembly-CSharp.dll.bytes    .bytes    7360512    71157bfdecb53e8a580432621f3725c7  | 
|         string m_RelativePath = string.Empty;  | 
|         public string relativePath { get { return m_RelativePath; } }  | 
|   | 
|         string m_FileName;  | 
|         public string fileName { get { return m_FileName; } }  | 
|   | 
|         string m_Extersion = string.Empty;  | 
|         public string extersion { get { return m_Extersion; } }  | 
|   | 
|         string m_Md5 = string.Empty;  | 
|         public string md5 { get { return m_Md5; } }  | 
|   | 
|         int m_Size = 0;  | 
|         public int size { get { return m_Size; } }       //字节       | 
|   | 
|   | 
|         bool m_LocalValid = false;  | 
|         public bool localValid  | 
|         {  | 
|             get { return m_LocalValid; }  | 
|             set { m_LocalValid = value; }  | 
|         }  | 
|   | 
|         public AssetVersion(string _versionString)  | 
|         {  | 
|             var strings = _versionString.Split('\t');  | 
|   | 
|             m_RelativePath = strings[0];  | 
|             m_Extersion = strings[1];  | 
|             int.TryParse(strings[2], out m_Size);  | 
|             m_Md5 = strings[3];  | 
|   | 
|             var paths = m_RelativePath.Split('/');  | 
|   | 
|             var lastPath = paths[paths.Length - 1];  | 
|             var index = lastPath.LastIndexOf('.');  | 
|             if (index != -1)  | 
|             {  | 
|                 m_FileName = lastPath.Substring(0, index);  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_FileName = lastPath;  | 
|             }  | 
|         }  | 
|   | 
|   | 
|   | 
|         public bool CheckLocalFileValid()  | 
|         {  | 
|             string path = string.Concat(ResourcesModel.Instance.ExternalStorePath, m_RelativePath);  | 
|             var fileInfo = new FileInfo(path);  | 
|   | 
|             if (!fileInfo.Exists)  | 
|             {  | 
|                 Debug.LogFormat("文件不存在 {0}", path);  | 
|                 return false;  | 
|             }  | 
|             if (fileInfo.Length != size)  | 
|             {  | 
|                 Debug.LogFormat("{0}文件大小不对{1}-{2}", path, size, fileInfo.Length);  | 
|                 return false;  | 
|             }  | 
|             var fileMD5 = FileExtersion.GetMD5HashFromFile(path);  | 
|             if (fileMD5 != md5)  | 
|             {  | 
|                 Debug.LogFormat("{0}文件md5不对{1}-{2}", path, md5, fileMD5);  | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|   | 
|         }  | 
|   | 
|         // 检查外部存储文件是否存在  | 
|         // 不存在则读取随包文件进行比较  | 
|         // 存在则比较  | 
|         public bool CheckLocalFileValid(AssetVersion otherAssetInfo)  | 
|         {  | 
|             string path = string.Concat(ResourcesModel.Instance.ExternalStorePath, m_RelativePath);  | 
|   | 
|             if (!File.Exists(path))  | 
|             {  | 
|                 Debug.LogFormat("转查StreamingAssetPath - 文件不存在 {0}", path);  | 
|                 if (otherAssetInfo == null || string.IsNullOrEmpty(otherAssetInfo.relativePath))  | 
|                     return false;  | 
|   | 
|                 if (otherAssetInfo.size != size)  | 
|                 {  | 
|                     Debug.LogFormat("StreamingAssetPath 文件大小不对{0}-{1}", size, otherAssetInfo.size);  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 if (otherAssetInfo.md5 != md5)  | 
|                 {  | 
|                     Debug.LogFormat("StreamingAssetPath 文件md5不对{0}-{1}", md5, otherAssetInfo.md5);  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 return true;  | 
|             }  | 
|   | 
|             return CheckLocalFileValid();  | 
|   | 
|         }  | 
|     }  | 
|   | 
| } |