C#读取和写入独立配置文件

C#项目,一般有默认的配置文件,Web项目下是web.config,应用程序项目下是app.config。

我们通常可以通过ConfigurationManager类,它直接读取AppSetting节中的配置项。

但如果用ConfigurationManager的AppSettings来读取配置项呢,那么对应的配置文件名必须是app.config,但有时候我们需要自定义配置文件,那么如何处理呢?

1、创建独立的配置文件,配置文件格式建议为utf-8编码,文件扩展名为.config

config文件

2、编写ConfigHelper类文件

class ConfigHelper
    {
        private static Configuration _config;

        static ConfigHelper()
        {
            string configPath = GetAssemblyPath() + Path.DirectorySeparatorChar + "*********.config";

            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = configPath;

            _config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
        }

        /// <summary>
        /// 获取Assemble所在路径
        /// </summary>
        /// <returns>Assemble所在路径,路径末尾不含分隔符</returns>
        public static String GetAssemblyPath()
        {
            return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        }

        public static void SetAppSeting(string key, string value)
        {
            if (key.Length == 0)
            {
                throw new ApplicationException("配置参数名称不能为空");
            }

            try
            {
                _config.AppSettings.Settings[key].Value = value;
                _config.Save(ConfigurationSaveMode.Modified);

            }
            catch (ConfigurationException ex)
            {
                throw new ApplicationException("配置参数[" + key + "]更新失败,请检查对应Config文件中appSettings节", ex);
            }
        }

        /// <summary>
        /// 在Config文件中,根据配置参数名称查询appSettings节,获取对应配置参数值
        /// </summary>
        /// <param name="key">配置参数名称</param>
        /// <returns>配置参数值</returns>
        /// <exception cref="ApplicationException">无法获取,抛出相应异常</exception>
        public static string GetAppSetting(string key)
        {
            string ret = null;

            if (key.Length == 0)
            {
                throw new ApplicationException("配置参数名称不能为空");
            }

            try
            {
                ret = _config.AppSettings.Settings[key].Value;
            }
            catch (ConfigurationException ex)
            {
                throw new ApplicationException("配置参数[" + key + "]获取失败,请检查对应Config文件中appSettings节", ex);
            }

            return ret;
        }

        /// <summary>
        /// 在Config文件中,根据配置参数名称查询connectionStrings节,获取对应配置参数值
        /// </summary>
        /// <param name="key">配置参数名称</param>
        /// <returns>配置参数值</returns>
        /// <exception cref="ApplicationException">无法获取,抛出相应异常</exception>
        public static string GetConnectionSetting(string key)
        {
            string ret = null;

            if (key.Length == 0)
            {
                throw new ApplicationException("配置参数名称不能为空");
            }

            try
            {
                ret = _config.ConnectionStrings.ConnectionStrings[key].ConnectionString;
            }
            catch (ConfigurationException ex)
            {
                throw new ApplicationException("数据库链接字符串" + key + "获取失败,请检查Config文件中connectionStrings节", ex);
            }

            return ret;
        }
    }

3、在需要操作config文件内容时,可直接使用

m_RecordWorkspace = ConfigHelper.GetAppSetting("RecordWorkspace");
m_RecordArchive = ConfigHelper.GetAppSetting("RecordArchive");

ConfigurationManager是针对非Web类项目的,相应的Web项目通常其配置文件为web.config,对应的WebConfigurationManager,其也有对应的方法,可以操作自定义配置文件。