using System; using System.Globalization; using System.IO; using System.Security; using System.Security.Cryptography; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Helper { /// <summary> /// 配置文件辅助类 /// </summary> public class ConfigHelper { /// <summary> /// 更新配置信息,将配置信息对象序列化至相应的配置文件中,文件格式为带签名的UTF-8 /// </summary> /// <typeparam name="T">配置信息类</typeparam> /// <param name="config">配置信息</param> public static void UpdateConfig<T>(T config) { Type configClassType = typeof (T); string configFilePath = GetConfigPath<T>(); //根据配置文件名读取配置文件 try { var xmlSerializer = new XmlSerializer(configClassType); using (var xmlTextWriter = new XmlTextWriter(configFilePath, Encoding.UTF8)) { xmlTextWriter.Formatting = Formatting.Indented; var xmlNamespace = new XmlSerializerNamespaces(); xmlNamespace.Add(string.Empty, string.Empty); xmlSerializer.Serialize(xmlTextWriter, config, xmlNamespace); } } catch (SecurityException ex) { throw new SecurityException(ex.Message, ex.DenySetInstance, ex.PermitOnlySetInstance, ex.Method, ex.Demanded, ex.FirstPermissionThatFailed); } } /// <summary> /// 获取配置信息 /// </summary> /// <typeparam name="T">配置信息类</typeparam> /// <returns>配置信息</returns> public static T GetConfig<T>() where T : class, new() { var configObject = new object(); Type configClassType = typeof (T); string configFilePath = GetConfigPath<T>(); //根据配置文件名读取配置文件 if (File.Exists(configFilePath)) { using (var xmlTextReader = new XmlTextReader(configFilePath)) { var xmlSerializer = new XmlSerializer(configClassType); configObject = xmlSerializer.Deserialize(xmlTextReader); } } var config = configObject as T; if (config == null) { return new T(); } return config; } /// <summary> /// 获取配置文件的服务器物理文件路径 /// </summary> /// <typeparam name="T">配置信息类</typeparam> /// <returns>配置文件路径</returns> public static string GetConfigPath<T>() { string path = AppDomain.CurrentDomain.BaseDirectory; if (path == AppDomain.CurrentDomain.BaseDirectory) { path = path + typeof (T).Name + ".config"; } return path; } public static string GetDirPath(string dirName) { string dirPath = dirName; if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } return dirPath; } public static string Md5(string input) { using (var md5 = new MD5CryptoServiceProvider()) { byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); return BitConverter.ToString(data).Replace("-", string.Empty).ToLower(CultureInfo.CurrentCulture); } } /// <summary> /// 读取配置文件 /// </summary> /// <returns></returns> public static string ReadConfig<T>() { string configContent = string.Empty; string filePath = GetConfigPath<T>(); if (File.Exists(filePath)) { using (var sr = new StreamReader(filePath, Encoding.Default)) { configContent = sr.ReadToEnd(); sr.Close(); } } return configContent; } /// <summary> /// 写入配置文件 /// </summary> /// <param name="config"></param> /// <returns></returns> public static void WriteConfig<T>(string config) { string fileName = GetConfigPath<T>(); using (StreamWriter w = File.AppendText(fileName)) { w.WriteLine(config); w.Close(); } } } }
时间: 2024-10-03 11:06:44