Files
LM-Middleware/SerialAssistant/WPFSerialAssistant/configuration/Configuration.cs
T
2022-10-08 11:41:14 +08:00

241 lines
6.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
namespace WPFSerialAssistant
{
/// <summary>
/// 配置类
/// </summary>
class Configuration
{
#region
/// <summary>
/// 默认的配置文件存储路径
/// </summary>
private static readonly string defaultConfPath = @"Config\config.conf";
/// <summary>
/// 默认配置文件的存储编码格式
/// </summary>
private static readonly Encoding defaultConfEncoding = Encoding.Default;
/// <summary>
/// 存储配置信息的字典
/// </summary>
private Dictionary<string, object> configuration = null;
#endregion
private Dictionary<string, object> ConfigInfo
{
get
{
return configuration;
}
}
#region
/// <summary>
/// 构造函数
/// </summary>
public Configuration()
{
if (configuration == null)
{
configuration = new Dictionary<string, object>();
}
}
/// <summary>
/// 私有构造函数
/// </summary>
/// <param name="confDic"></param>
private Configuration(Dictionary<string, object> confDic)
{
if (confDic == null)
{
this.configuration = new Dictionary<string, object>();
}
else
{
this.configuration = confDic;
}
}
/// <summary>
/// 添加配置键值对
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
public void Add(string key, object value)
{
configuration.Add(key, value);
}
/// <summary>
/// 移除配置信息键值对
/// </summary>
/// <param name="key">键</param>
public void Remove(string key)
{
configuration.Remove(key);
}
/// <summary>
/// 清除所有的配置信息键值对
/// </summary>
public void Clear()
{
configuration.Clear();
}
/// <summary>
/// 获取配置信息值
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
public object Get(string key)
{
return configuration[key];
}
/// <summary>
/// 获取string类型的配置信息
/// </summary>
/// <param name="key">键</param>
/// <returns>string类型的值</returns>
public string GetString(string key)
{
return Get(key).ToString();
}
/// <summary>
/// 获取int类型的配置信息
/// </summary>
/// <param name="key">键</param>
/// <returns>int类型的值</returns>
public int GetInt(string key)
{
return int.Parse(Get(key).ToString());
}
/// <summary>
/// 获取bool类型的配置信息
/// </summary>
/// <param name="key">键</param>
/// <returns>bool类型的值</returns>
public bool GetBool(string key)
{
return bool.Parse(Get(key).ToString());
}
/// <summary>
/// 获取double类型的配置信息
/// </summary>
/// <param name="key">键</param>
/// <returns>double类型的值</returns>
public double GetDouble(string key)
{
return double.Parse(Get(key).ToString());
}
/// <summary>
/// 获取decimal类型的配置信息
/// </summary>
/// <param name="key">键</param>
/// <returns>decimal类型的值</returns>
public decimal GetDecimal(string key)
{
return decimal.Parse(Get(key).ToString());
}
#endregion
#region
/// <summary>
/// 存储配置信息到默认的路径中
/// </summary>
/// <param name="conf"></param>
public static void Save(Configuration conf)
{
Save(conf, defaultConfPath);
}
/// <summary>
/// 存储配置信息到自定义路径
/// </summary>
/// <param name="conf"></param>
/// <param name="path">存储配置信息的路径</param>
public static void Save(Configuration conf, string path)
{
// 构建配置信息的json字符串
string confStr = Newtonsoft.Json.JsonConvert.SerializeObject(conf.ConfigInfo);
// 如果指定的配置路径不存在,则新建一个
if (System.IO.File.Exists(path) == false)
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
}
// 保存配置信息
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(path, false, defaultConfEncoding))
{
try
{
sw.Write(confStr);
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 从默认存储路径读取配置信息
/// </summary>
/// <returns>配置信息</returns>
public static Configuration Read()
{
return Read(defaultConfPath);
}
/// <summary>
/// 从自定义存储路径读取配置信息
/// </summary>
/// <param name="path">存储配置信息路径</param>
/// <returns>配置信息</returns>
public static Configuration Read(string path)
{
string confStr = "";
Configuration conf = null;
if (System.IO.File.Exists(path) == false)
{
return null;
}
// 读取配置信息
using (System.IO.StreamReader sr = new System.IO.StreamReader(path, defaultConfEncoding))
{
try
{
confStr = sr.ReadToEnd();
// 解析得到配置信息
Dictionary<string, object> confInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(confStr);
conf = new Configuration(confInfo);
}
catch (Exception ex)
{
throw ex;
}
}
return conf;
}
#endregion
}
}