//获取保存版本文件数据 static void GetVer() { if (verNew == null) { Debug.LogError("先检查一下版本再生成"); return; } if (verNew.Ver == ver.Ver) { Debug.LogError("版本无变化"); return; } //保存数据 verNew.SaveToPath(root); Debug.LogError("生成OK Ver:" + verNew.Ver); ver = verNew; }
/// <summary> /// 通过路径,读取版本文件数据 /// </summary> /// <param name="path"></param> public static VerManager Read(string path) { string p = Path.Combine(path, "allver.ver.txt"); if (!File.Exists(p)) { return(null); } //有文本数据 string txt = File.ReadAllText(p, Encoding.UTF8); string[] lines = txt.Split(new string[] { "\n", "\r" }, System.StringSplitOptions.RemoveEmptyEntries); VerManager ver = new VerManager(); foreach (string l in lines) { if (l.IndexOf("Ver:") == 0) { //取得文件版本号 ver.Ver = int.Parse(l.Substring(4)); } else { //解析获得文件内容信息 组信息,hash,文件个数 string[] sp = l.Split('|'); VerInfo info = new VerInfo(sp[0]); info.Read(ver.Ver, sp[1], int.Parse(sp[2]), path); if (ver.Groups.ContainsKey(sp[0])) { ver.Groups[sp[0]] = info; } else { ver.Groups.Add(sp[0], info); } } } return(ver); }
/// <summary> /// 初始化版本号和文件路径信息 /// </summary> static void InitVerAndPath() { //读取文件分组版本信息 ver = VerManager.Read(root); if (ver == null) { //如果当前路径下面没有此版本文件组信息 //初始化一个版本文件组信息 ver = new VerManager(); //获得根目录下面的文件夹名称 string[] groups = Directory.GetDirectories(root); foreach (string g in groups) { //移除根目录 string path = g.Replace(root, "").ToLower(); if (path.IndexOf("path") == 0 || path.Contains(".svn")) { continue; } VerInfo info = new VerInfo(path); if (ver.Groups.ContainsKey(path)) { ver.Groups[path] = info; } else { ver.Groups.Add(path, info); } } //设置文件版本号 ver.Ver = 0; } }
/// <summary> /// 检测文件版本信息 /// </summary> static void CheckVer() { verNew = new VerManager(); string[] groups = Directory.GetDirectories(root); //输出当前文件信息里面不包含的文件路径 foreach (string g in groups) { //string path = g.Substring(2).ToLower(); string path = g.Replace(root, "").ToLower(); if (path.IndexOf("path") == 0 || path.Contains(".svn")) { continue; } if (!ver.Groups.ContainsKey(path.Replace(root, ""))) { //如果文件数据里面不包含此文件组信息 Debug.LogError("目录未包含:" + path.Replace(root, "") + " 增加此数据 "); ver.Groups.Add(path, new VerInfo(path)); } } //标识出来各种操作的文件个数 int delcount = 0; int updatecount = 0; int addcount = 0; foreach (var g in ver.Groups) { //存储获得文件组里所有文件的hash verNew.Groups[g.Key] = new VerInfo(g.Key); verNew.Groups[g.Key].GetHash(); foreach (var f in g.Value.FileHash) { //检测如果新的文件组hash表中没有 之前读取配置文件里面的文件hash,那么就认为此文件被删除掉了 if (!verNew.Groups[g.Key].FileHash.ContainsKey(f.Key)) { Debug.LogError("文件被删除:" + g.Key + ":" + f.Key); delcount++; } else { //如果文件的hash值不相同 更新文件hash值 string hash = verNew.Groups[g.Key].FileHash[f.Key]; string oldHash = g.Value.FileHash[f.Key]; if (!string.Equals(hash, oldHash)) { Debug.LogError("文件更新:" + g.Key + ":" + f.Key); updatecount++; } } } //循环遍历 新获得的文件hash表数据,检测添加的文件个数 foreach (var f in verNew.Groups[g.Key].FileHash) { //如果原hash表不包含此文件数据,那么次数据就是新添加的数据 if (!g.Value.FileHash.ContainsKey(f.Key)) { Debug.LogError("文件增加:" + g.Key + ":" + f.Key); addcount++; } } } if (addcount == 0 && delcount == 0 && updatecount == 0) { verNew.Ver = ver.Ver; Debug.LogError("无变化 ver=" + verNew.Ver); } else { //改变文件版本号,如果有文件数据改变 verNew.Ver = ver.Ver + 1; Debug.LogError("检查变化结果 add:" + addcount + " remove:" + delcount + " update:" + updatecount); Debug.LogError("版本号变为:" + verNew.Ver); } }