ConfigHelper 配置文件辅助类

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

ConfigHelper 配置文件辅助类的相关文章

C#读写config配置文件

应用程序配置文件(App.config)是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 对于一个config文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="ServerIP" value=&quo

C#读写config配置文件的方法_C#教程

如下所示: <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="ServerIP" value="127.0.0.1"></add> <add key="DataBase" value="WarehouseDB"&g

简单通用JDBC辅助类封装(实例)_java

哎,最近很好久没写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernate 里面的SimpleJdbcTemplate,这里我想到了在大学的时候自己用过的一个简单的jdbc封装,现在我将代码贴出来,和大家一起分享: Config类:读取同一包下的数据库连接配置文件,这样是为了更好的通用性考虑 package com.tly.dbutil; import java.io.IOException; import java.util.

Spring AOP基于配置文件的面向方法的切面

Spring AOP基于配置文件的面向方法的切面 Spring AOP根据执行的时间点可以分为around.before和after几种方式. around为方法前后均执行 before为方法前执行 after为方法后执行 这里只对around的方式进行介绍.本文只是摘录相应的思路,许多辅助类和方法不一一给出.因此下述方法并不能正常运行. 定义忽略权限检查注解类 @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.

.NET开发不可不知、不可不用的辅助类(一)

1. 用于获取或设置Web.config/*.exe.config中节点数据的辅助类     /// <summary>    /// 用于获取或设置Web.config/*.exe.config中节点数据的辅助类    /// </summary>    public sealed class AppConfig    {        private string filePath;        /// <summary>        /// 从当前目录中按顺序

QSettings读写注册表、配置文件

简述 一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表.读写配置文件. 关于QSettings的使用前面已经介绍过了,比较详细,见"更多参考",下面介绍下QSettings常用功能-读写注册表.配置文件. 简述 优点 读写注册表 一般存储 一般读取 分目录存储 替换applicationName 分组 读写配置文件 一般存储 一般读取 分组存储 分组读取 分目录存储 删除内容 疑问解释 更多参考 优点 无需指定注册表路径 一般

Linux Bash的环境配置文件

当用户登陆时,将读取以下两个配置文件: 1)/etc/profile:系统全局配置文件,最好不要修改该文件 2)~/.bash_profile或~/.bash_login或~/.profile:用户私有的配置文件 全局配置文件 - /etc/profile /etc/profile会依次调用下列文件: 1)/etc/inputrc 2)/etc/profile.d/*.sh:如果你需要帮所有用户设置一些共享的命令别名时,可以在这个目录下创 建扩展名为.sh的文件 3)/etc/sysconfig

解决spring jpa中配置文件报&#039;jpa:repositories&#039;的问题

一.问题描述     使用spring jpa,报no declaration can be found for element 'jpa:repositories'错误的解决方案     Multiple annotations found at this line: - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'jpa:reposi

如何优化Urchin配置文件数据库的磁盘空间

Urchin 的报告数据存储在各个配置文件所独有的每月数据库中(注:Urchin分析后的数据是按月归档),这些数据库一般位于 Urchin 的 data/reports 目录下.每个配置经过处理的数据库大小为原日志大小的5% 至10%. 默认情况下,Urchin 会保留每月的这些配置文件数据库,但经过长时间的数据积累数据量会变大,导致Urchin处理后的数据占用空间越来越大,并且在用户查看时也会降低Urchin的响应效率.因此,需要优化Urchin 配置文件每月数据库的磁盘存储空间. 优化 Ur