using System.IO; using System.Text.RegularExpressions; namespace H5MotaUpdate.ViewModels { internal static class VersionUtils { public static bool IsValidVersion(string? version) { if (String.IsNullOrEmpty(version)) return false; string[] segments = version.Split('.'); foreach (string segment in segments) { if (!int.TryParse(segment, out int part)) return false; } return true; } /// /// 从给定路径的旧塔文件夹中读取版本号 /// /// /// public static string GetVersion(string? folderPath) { if (folderPath == null) return "文件夹路径不合法"; string filePath = Path.Combine(folderPath, "main.js"); if (!File.Exists(filePath)) return "给定文件夹未找到文件main.js"; string fileContent; try { fileContent = File.ReadAllText(filePath); } catch (Exception ex) { return "读取文件内容失败,原因: " + ex.Message; } string version = null; // 优先匹配 this.__VERSION__ = "..."; Regex specialVersionRegex = new Regex( @"this\s*\.\s*__VERSION__\s*=\s*['""](\d+(\.\d+)+)['""]\s*;?"); Match specialMatch = specialVersionRegex.Match(fileContent); if (specialMatch.Success) { version = specialMatch.Groups[1].Value; if (IsValidVersion(version)) return version; } // 回退到原来的方式:this.version = "x.x.x" Regex normalVersionRegex = new Regex(@"this\.version\s*=\s*['""](\d+(\.\d+)+)['""];?"); Match normalVersionMatch = normalVersionRegex.Match(fileContent); if (normalVersionMatch.Success) { version = normalVersionMatch.Groups[1].Value; if (IsValidVersion(version)) return version; } return "文件 main.js中未找到格式合法的版本号!"; } } }