Пример #1
0
        /// <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);
        }