C#之App.Config文件操作的实现

 更新时间:2026年01月04日 10:03:30   作者:*Major*-莙工科技有限公司  
AppConfigHelper提供了一种方便的方式来读取、添加、修改和删除应用程序配置文件中的配置项,本文主要介绍了C#之App.Config文件操作的实现,感兴趣的可以了解一下

一 AppConfigHelper

  using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Helper
{
    /// <summary>
    /// 操作配置文件(App.config)
    /// </summary>
    public class AppConfigHelper
    {

        /// <summary>
        /// 输入Key的值,返回配置的值
        /// </summary>
        /// <param name="KeyName"></param>
        /// <returns></returns>
        public string ReadConfig(string KeyName)
        {
            Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            return cfa.AppSettings.Settings[KeyName].Value;
        }

        /// <summary>
        /// 根据配置的名称,查询独立的数据,读取app.config
        /// </summary>
        /// <param name="ProName"></param>
        /// <param name="KeyName"></param>
        /// <returns></returns>
        public string ReadConfig(string ProName, string KeyName)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var mySection = config.GetSection(ProName) as CommonSection;
            foreach (CommonSection.CommonKeyValueSetting add in mySection.KeyValues)
            {
                if (add.Key == KeyName)
                {
                    return add.Value;
                }
            }
            return null;
        }

        /// <summary>
        /// 增加配置文件
        /// </summary>
        /// <param name="KeyName"></param>
        /// <param name="Value"></param>
        public void AddConfig(string KeyName, string Value)
        {
            Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            cfa.AppSettings.Settings.Add(KeyName, Value);
            cfa.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }

        /// <summary>
        /// 根据配置的名称,查询独立的数据,并添加独立的内容
        /// </summary>
        /// <param name="ProName"></param>
        /// <param name="KeyName"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        public void AddConfig(string ProName, string KeyName, string Value)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var mySection = config.GetSection(ProName) as CommonSection;
            mySection.KeyValues.Add(new CommonSection.CommonKeyValueSetting() { Key = KeyName, Value = Value });
            config.Save();
            ConfigurationManager.RefreshSection(ProName);  //刷新
        }

        /// <summary>
        /// 删除配置文件
        /// </summary>
        /// <param name="KeyName"></param>
        public void DeleteConfig(string KeyName)
        {
            Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            cfa.AppSettings.Settings.Remove(KeyName);
            cfa.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }

        /// <summary>
        /// 修改配置文件数据
        /// </summary>
        /// <param name="KeyName"></param>
        /// <param name="Value"></param>
        public void WriteConfig(string KeyName, string Value)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            config.AppSettings.Settings[KeyName].Value = Value;
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }

        /// <summary>
        /// 根据配置的名称,查询独立的数据,并修改内容
        /// </summary>
        /// <param name="ProName"></param>
        /// <param name="KeyName"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        public void WriteConfig(string ProName, string KeyName, string Value)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var mySection = config.GetSection(ProName) as CommonSection;
            mySection.KeyValues.Remove(KeyName);
            mySection.KeyValues.Add(new CommonSection.CommonKeyValueSetting() { Key = KeyName, Value = Value });
            config.Save();
            ConfigurationManager.RefreshSection(ProName);  //刷新
        }

    }
    /// <summary>
    /// 配置节点基类
    /// </summary>
    public class CommonSection : ConfigurationSection
    {

        private static ConfigurationProperty s_property =
            new ConfigurationProperty(string.Empty, typeof(CommonKeyValueCollection), null, ConfigurationPropertyOptions.IsDefaultCollection);

        [ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
        public CommonKeyValueCollection KeyValues
        {
            get
            {
                return (CommonKeyValueCollection)base[s_property];
            }
        }

        /// <summary>
        /// 自定义一个集合
        /// </summary>
        [ConfigurationCollection(typeof(CommonKeyValueSetting))]
        public class CommonKeyValueCollection : ConfigurationElementCollection
        {

            public CommonKeyValueCollection() : base(StringComparer.OrdinalIgnoreCase)
            {

            }

            new public CommonKeyValueSetting this[string name]
            {
                get { return (CommonKeyValueSetting)base.BaseGet(name); }
                set { base[name] = value; }
            }

            protected override ConfigurationElement CreateNewElement()
            {
                return new CommonKeyValueSetting();
            }


            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((CommonKeyValueSetting)element).Key;
            }

            public void Add(CommonKeyValueSetting setting)
            {
                this.BaseAdd(setting);
            }

            public void Clear()
            {
                base.BaseClear();
            }

            public void Remove(string name)
            {
                base.BaseRemove(name);
            }

        }

        /// <summary>
        /// 集合中的每个元素
        /// </summary>
        public class CommonKeyValueSetting : ConfigurationElement
        {

            /// <summary>
            /// 键
            /// </summary>
            [ConfigurationProperty("key", IsRequired = true)]
            public string Key
            {
                get { return this["key"].ToString(); }
                set { this["key"] = value; }
            }

            /// <summary>
            /// 值
            /// </summary>
            [ConfigurationProperty("value", IsRequired = true)]
            public string Value
            {
                get { return this["value"].ToString(); }
                set { this["value"] = value; }
            }

        }

    }

}

二 读取标准 appSettings

添加appSettings

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>

	<appSettings>
		<add key="Width" value="100"/>
		<add key="Height" value="200"/>
		<add key="Area" value="99"/>
	</appSettings>
</configuration>

读取appSettings

  // 全局变量
  AppConfigHelper config = new AppConfigHelper();
  string h = config.ReadConfig("Height");
  MessageBox.Show(h.ToString());

三 添加配置 appSettings

   config.AddConfig("XXXX", "vvvv");
   MessageBox.Show("添加成功!!");

   string va = config.ReadConfig("XXXX");

四 修改标准 appSettings

         config.WriteConfig("Height", "7777");
         MessageBox.Show("修改成功!!");

五 删除配置 appSettings

       config.DeleteConfig("Height");
       MessageBox.Show("删除成功!!");

到此这篇关于C#之App.Config文件操作的实现的文章就介绍到这了,更多相关C# App.Config文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#静态代码织入AOP组件之Rougamo的使用详解

    C#静态代码织入AOP组件之Rougamo的使用详解

    Rougamo是一个静态代码织入的AOP组件,同为AOP组件较为常用的有Castle、Autofac、AspectCore等,下面就跟随小编一起来学习一下它的具体使用吧
    2024-01-01
  • 使用C#代码进行Word文档中的邮件合并功能

    使用C#代码进行Word文档中的邮件合并功能

    邮件合并是 Microsoft Word 中的一个强大功能,它允许您通过单一模板文档和数据源创建多份文档,对于需要向大量收件人发送个性化信件的任务,邮件合并尤其有用,无需逐一编写每封信件,在本文中,您将学习如何使用C#在 Word 文档中执行邮件合并,需要的朋友可以参考下
    2025-12-12
  • C# 程序集和反射详解

    C# 程序集和反射详解

    本文主要介绍了C# 程序集和反射的相关知识。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • C#实现json的序列化和反序列化实例代码

    C#实现json的序列化和反序列化实例代码

    这篇文章主要介绍了C#实现json的序列化和反序列化实例代码,有需要的朋友可以参考一下
    2013-12-12
  • C# 获取枚举值的简单实例

    C# 获取枚举值的简单实例

    这篇文章介绍了C# 获取枚举值的简单实例,有需要的朋友可以参考一下
    2013-09-09
  • C#使用EF连接PGSql数据库的完整步骤

    C#使用EF连接PGSql数据库的完整步骤

    这篇文章主要给大家介绍了关于C#使用EF连接PGSql数据库的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2019-01-01
  • vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离

    vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离

    服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与
    2016-04-04
  • C#七大经典排序算法系列(上)

    C#七大经典排序算法系列(上)

    这篇文章主要为大家详细介绍了C#七大经典排序算法系列上篇,冒泡排序,快速排序等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • C#多线程学习之(三)生产者和消费者用法分析

    C#多线程学习之(三)生产者和消费者用法分析

    这篇文章主要介绍了C#多线程学习之生产者和消费者用法,实例分析了C#中线程冲突的原理与资源分配的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#正则表达式之Ismatch()的用法解读

    C#正则表达式之Ismatch()的用法解读

    这篇文章主要介绍了C#正则表达式之Ismatch()的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论