using UnityEngine; using System.IO; using System.Collections.Generic; namespace LaunchCommon { 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; } } //checkList 用于外部检查文件下载后是否一致,不包含没有文件的情况 public bool CheckLocalFileValid(List checkList = null) { string path = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, m_RelativePath); var fileInfo = new FileInfo(path); if (!fileInfo.Exists) { Debug.LogFormat("文件不存在 {0}", path); return false; } if (fileInfo.Length != size) { if (checkList != null && checkList.Count == 0) { checkList.Add(false); } Debug.LogFormat("{0}文件大小不对{1}-{2}", path, size, fileInfo.Length); return false; } var fileMD5 = FileExtersion.GetMD5HashFromFile(path); if (fileMD5 != md5) { if (checkList != null && checkList.Count == 0) { checkList.Add(false); } Debug.LogFormat("{0}文件md5不对{1}-{2}", path, md5, fileMD5); return false; } return true; } // 检查外部存储文件是否存在 // 不存在则读取随包文件进行比较 // 存在则比较 public bool CheckLocalFileValid(AssetVersion otherAssetInfo) { string path = StringUtility.Contact(ResourcesPath.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(); } } }