using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MV485.helper { public class ConfigManager { // 保存唯一实例的静态变量 private static readonly Lazy _instance = new Lazy(() => new ConfigManager()); private string configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.ini"); // 私有构造函数,防止外部直接创建实例 private ConfigManager() { } // 获取唯一实例的公共属性 public static ConfigManager Instance => _instance.Value; // 读取配置文件 public Dictionary LoadConfig() { var config = new Dictionary(); if (File.Exists(configFilePath)) { string[] lines = File.ReadAllLines(configFilePath); foreach (var line in lines) { // 跳过空行和注释行 if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue; // 分割键和值 var parts = line.Split(new[] { '=' }, 2); if (parts.Length == 2) { string key = parts[0].Trim(); string value = parts[1].Trim(); config[key] = value; } } } return config; } // 获取某一项的值 public string GetConfigValue(ConfigKey key, string defaultValue = null) { var config = LoadConfig(); string keyString = key.ToString(); if (config.ContainsKey(keyString)) { return config[keyString]; } return defaultValue; // 如果没有找到该项,则返回默认值 } // 更新配置项 public void UpdateConfig(ConfigKey key, string newValue) { // 先加载现有的配置 var config = LoadConfig(); string keyString = key.ToString(); // 如果配置文件中包含该项,则更新它 if (config.ContainsKey(keyString)) { config[keyString] = newValue; } else { // 如果没有该配置项,则添加新的键值对 config.Add(keyString, newValue); } // 保存更新后的配置 SaveConfig(config); } // 保存配置到文件 public void SaveConfig(Dictionary config) { using (StreamWriter writer = new StreamWriter(configFilePath)) { foreach (var item in config) { writer.WriteLine($"{item.Key} = {item.Value}"); } } } //----------------------------------------------------------------------- } public enum ConfigKey { //SearchPortName, SearchBaudrate, //搜索的波特率,逗号分割 DevIdRange, //地址范围,逗号分割 SerachTimeoutPer, //每设备超时时间,ms整数 ConfigPortName, //........... ConfigBaudrate, //设备参数配置选项中波特率 ConfigDevId, //......设备ID(地址) ReadInterval, //读取数据的间隔时间 PageSize, //分页的大小 DataLeftWidth, //数据监控左侧*的宽度 AutoListenData, //自动监听数据 IsSearchOne, //搜索一个设备 SaveImagePath, //图像的保存路径 UpgradeFile, //升级文件全路径 // 其他配置项... } //----------------------------------------------- }