/// <summary> /// 解析单元配置文件 /// </summary> /// <param name="unitSettingsFileInfo"></param> /// <returns></returns> private Entities.UnitSettings ParseUnitFile(FileInfo unitSettingsFileInfo) { //Span<Byte> bytes=new Span<Byte>(); Byte[] bytes; FileStream fs = null; try { fs = unitSettingsFileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); bytes = new Byte[fs.Length]; fs.Read(bytes); fs.Close(); }catch (Exception exception) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,{exception.Message},{exception.StackTrace}"); return(null); } finally { if (fs != null) { fs.Dispose(); } } String json = Encoding.UTF8.GetString(bytes); if (String.IsNullOrWhiteSpace(json)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,文件内容为空"); return(null); } if (json.IndexOf('§') > -1) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,文件内容含有保留字符\"§\""); return(null); } Entities.UnitSettings unitSettings = Newtonsoft.Json.JsonConvert.DeserializeObject <Entities.UnitSettings>(json); if (unitSettings == null) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,文件反序列化失败"); return(null); } if (String.IsNullOrWhiteSpace(unitSettings.Description)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Warning]", $"单元\"{unitSettingsFileInfo.FullName}\"解析警告,不建议 Description 配置项为空"); } if (String.IsNullOrWhiteSpace(unitSettings.ExecuteAbsolutePath)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,ExecuteAbsolutePath 配置项为空"); return(null); } if (!File.Exists(unitSettings.ExecuteAbsolutePath)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,ExecuteAbsolutePath 配置项无效,可执行文件不存在或没有读取权限"); return(null); } if (String.IsNullOrWhiteSpace(unitSettings.WorkAbsoluteDirectory)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,WorkAbsoluteDirectory 配置项为空"); return(null); } if (!Directory.Exists(unitSettings.WorkAbsoluteDirectory)) { Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile[Error]", $"单元\"{unitSettingsFileInfo.FullName}\"解析失败,WorkAbsoluteDirectory 配置项无效,可执行文件工作目录不存在或没有读取权限"); return(null); } unitSettings.SetName(unitSettingsFileInfo.GetOriginName()); Program.LoggerModule.Log("Modules.UnitControlModule.ParseUnitFile", $"单元\"{unitSettingsFileInfo.FullName}\"解析完成"); return(unitSettings); }