C# 配置文件读取与修改

ConfigurationManager.AppSettings 与 ConfigurationSettings.AppSettings
都可以取配置文件 appSettings 节的内容,那么它们有区别么?

配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件,
一种是web的配置文件.

在 web.config
中可以存储一些信息以供网站程序调用。

没有区别。但是推荐用
ConfigurationManager,MSDN 上有如下说明:

两种配置文件最大的区别是web的配置文件更新之后会实时更新,
应用程序的配置文件不会实时更新.

web.config 部分

ConfigurationSettings 类仅提供向后兼容性。对于新的应用程序,应改为使用
ConfigurationManager 类或 WebConfigurationManager
类。若要使用这两个类,必须在您的项目或应用程序中添加对
System.Configuration 命名空间的引用。

更新应用程序的配置文件之后需刷新

web.config 中在根结点 configuration 之下有一个名称为 appSettings
的结点(若不存在可以手动添加),该节点用于存储应用程序设置,以下为示例片段:

ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。

ConfigurationSettings也存在这个问题, 但是我还不知道怎么刷新节点, 呵呵.

<configuration>
  <appSettings>
    <add key=”var” value=”这是一个设置”/>
  </appSettings>

旧方法: 各位看官最好使用下面”新方法”

配置文件:

<configuration> 
  <appSettings> 
     style=”margin: 0px; padding: 0px; color: rgb(255, 0, 0);”><add
key=”name” value=”我是远程服务器”/> 

  </appSettings> 
</configuration>

后台程序值得读取:

string
s=System.Configuration.ConfigurationSettings.AppSettings[“name”];

修改配置文件的值:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// <summary>
/// 更新配置文件信息
/// </summary>
/// <param name="name">配置文件字段名称</param>
/// <param name="Xvalue">值</param>
private void UpdateConfig(string name,string Xvalue)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(Application.ExecutablePath + ".config");
    XmlNode node = doc.SelectSingleNode(@"//add[@key='"+name+"']");
    XmlElement ele = (XmlElement)node;
    ele.SetAttribute("value", Xvalue);
    doc.Save(Application.ExecutablePath + ".config");
}

向配置文件插入值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
///<summary> 
///向.config文件的appKey结写入信息AppValue   保存设置 
///</summary> 
///<param name="AppKey">节点名</param> 
///<param name="AppValue">值</param>
Private void SetValue(String AppKey,String AppValue)
{
    Xmldocument xDoc=new XmlDocument();
    xDoc.Load(System.Windows.Forms.Application.ExecutablePath+”.config”);
    XmlNode xNode;
    XmlElement xElem1;
    XmlElement xElem2;
    xNode=xDoc.SelectSingleNode(“//appSettings”);
    xElem1=(XmlElement)xNode.SelectSingleNode(“//add[@key=’”+AppKey+”’]”);
    if(xElem1!=null)
    xElem1.SetAttribute(“value”,AppValue);
    else
    {
        xElem2=xdoc.CreateElement(“add”);
        xElem2.SetAttribute(“key”,AppKey);
        xElem2.setAttribute(“value”,AppValue);
        xNode.AppendChild(xElem2);
    }
    xDoc.Save(System.Windows.Forms.Application.ExecutablePath+”.config”);
}

通过 add 添加一个 key。

新方法:

System.Configuration.ConfigurationSettings.AppSettings[“Key”]; 
但是现在FrameWork2.0已经明确表示此属性已经过时。并建议改为ConfigurationManager或WebConfigurationManager。并且AppSettings属性是只读的,并不支持修改属性值.

但是要想调用ConfigurationManager必须要先在工程里添加system.configuration.dll程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,.net
TablePage下即可找到)添加引用后可以用 String str =
ConfigurationManager.AppSettings[“Key”]来获取对应的值了。

更新配置文件: 
Configuration cfa =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
//添加

cfa.AppSettings.Settings.Add(“key”, “Name”)

//修改

cfa.AppSettings.Settings[“BrowseDir”].Value = “name”;

最后调用 
cfa.Save(); 
当前的配置文件更新成功。

ConfigurationManager.RefreshSection(“appSettings”);//
刷新命名节,在下次检索它时将从磁盘重新读取它。记住应用程序要刷新节点

原文地址:

程序读取部分

string var = ConfigurationManager.AppSettings[“var”];
//或 string var = System.Configuration.ConfigurationSettings.AppSettings[“var”];
//不推荐 ConfigurationSettings

C# 中使用中括号取索引值。

ConfigurationManager
的名称空间是:

System.Configuration

该名称空间默认是导入的。

注意

并不推荐在 web.config 中明文存储敏感信息,请参见 web.config
加密。

相关阅读

  • ASP.NET
    中读取数据库连接字符串
  • 用 appSettings
    使网页统一标题
  • ConfigurationManager 与 ConfigurationSettings
    的区别

发表评论

电子邮件地址不会被公开。 必填项已用*标注