VS2005中读写配置文件APP.CONFIG
1.
dot Net Framework 2.0里面的ConfigurationManager类是用来对app.config文件进行解析的
ConfigurationManager类里面有AppSettings和ConnectionStrings属性
前者返回的是在app.config文件中定义的Appsettings块中的key所对应的value
后者返回值是一个ConnectionStringSettings类型,其中包含ConnectionString
示例文件app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="myConnectString" connectionString="Database=(local)" />
</connectionStrings>
<appSettings>
<add key="username" value="wxf"/>
<add key="password" value="fxw"/>
</appSettings>
</configuration>
示例解析程序
string ConnectString = System.Configuration.ConfigurationManager.ConnectionStrings["myConnectString"].ConnectionString;
System.Diagnostics.Debug.WriteLine(ConnectString);
System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["username"]);
System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["password"]);
dot Net Framework 2.0里面的ConfigurationManager类是用来对app.config文件进行解析的
ConfigurationManager类里面有AppSettings和ConnectionStrings属性
前者返回的是在app.config文件中定义的Appsettings块中的key所对应的value
后者返回值是一个ConnectionStringSettings类型,其中包含ConnectionString
示例文件app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="myConnectString" connectionString="Database=(local)" />
</connectionStrings>
<appSettings>
<add key="username" value="wxf"/>
<add key="password" value="fxw"/>
</appSettings>
</configuration>
示例解析程序
string ConnectString = System.Configuration.ConfigurationManager.ConnectionStrings["myConnectString"].ConnectionString;
System.Diagnostics.Debug.WriteLine(ConnectString);
System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["username"]);
System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["password"]);
2.
除此之外也可以对app.config文件进行自定义配置,所用方法如下
1)在App.config文件的configuration节点中加入
<configSections></configSections>在这两个节点中加入节点section的定义
节点section的属性主要有name和type,name就是自己定义的节点名字,type由前后两部分组成
前一部分是节点处理类的名字,后一部分是处理类所在的程序集的名字。
2) 定义自定义节点,级别与<ConfigSections并列
以上两步完成之后,App.config如下所示
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="AppMenuSection" type="WinFormExamplesByWxfForTeachUse.AppMenuSectionHandler,
WinFormExamplesByWxfForTeachUse"/>
</configSections>
<AppMenuSection>
<DisplayMenus MenuItem="appMenuToolStripMenuItem" Text="AppMenu" Visible="true">
<DisplayMenu MenuItem="appSubMenu1ToolStripMenuItem" Text="AppSubMenu1" Visible="true"></DisplayMenu>
<DisplayMenu MenuItem="appSubMenu2ToolStripMenuItem" Text="AppSubMenu2" Visible="true"></DisplayMenu>
<DisplayMenu MenuItem="appSubMenu3ToolStripMenuItem" Text="AppSubMenu3" Visible="true"></DisplayMenu>
</DisplayMenus>
</AppMenuSection>
</configuration>
除此之外也可以对app.config文件进行自定义配置,所用方法如下
1)在App.config文件的configuration节点中加入
<configSections></configSections>在这两个节点中加入节点section的定义
节点section的属性主要有name和type,name就是自己定义的节点名字,type由前后两部分组成
前一部分是节点处理类的名字,后一部分是处理类所在的程序集的名字。
2) 定义自定义节点,级别与<ConfigSections并列
以上两步完成之后,App.config如下所示
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="AppMenuSection" type="WinFormExamplesByWxfForTeachUse.AppMenuSectionHandler,
WinFormExamplesByWxfForTeachUse"/>
</configSections>
<AppMenuSection>
<DisplayMenus MenuItem="appMenuToolStripMenuItem" Text="AppMenu" Visible="true">
<DisplayMenu MenuItem="appSubMenu1ToolStripMenuItem" Text="AppSubMenu1" Visible="true"></DisplayMenu>
<DisplayMenu MenuItem="appSubMenu2ToolStripMenuItem" Text="AppSubMenu2" Visible="true"></DisplayMenu>
<DisplayMenu MenuItem="appSubMenu3ToolStripMenuItem" Text="AppSubMenu3" Visible="true"></DisplayMenu>
</DisplayMenus>
</AppMenuSection>
</configuration>
3)自定义节点处理类,与上面section的type里面的名字统一,此类需要实现IConfigurationSectionHandler接口
这个接口定义了一个函数
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section);
需要在这个函数里面对section的内容进行解析,然后讲结果返回
例如:
class AppMenuSectionHandler:IConfigurationSectionHandler
{
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section)
{
return section;
}
}
4)在要获得section里面数据的程序内部进行如下调用
System.Configuration.ConfigurationManager.GetSection("AppMenuSection");
这个GetSection方法将会自动调用 3)步中实现的IConfigurationSectioinHandler接口中实现的函数,返回值自然是在函数实现过程中定义的返回值
例如:
private void ProcessCustomerConfiguration()
{
XmlNode myAppSettingsNode = (XmlNode)(System.Configuration.ConfigurationManager.GetSection("AppMenuSection"));
XmlNode myMenuNode = myAppSettingsNode.SelectSingleNode("DisplayMenus");
foreach (XmlNode subNode in myMenuNode.SelectNodes("DisplayMenu"))
{
ToolStripMenuItem thisMenu=null;
switch (subNode.Attributes["MenuItem"].InnerText)
{
case "appSubMenu1ToolStripMenuItem":
thisMenu = this.appSubMenu1ToolStripMenuItem;
break;
case "appSubMenu2ToolStripMenuItem":
thisMenu = appSubMenu2ToolStripMenuItem;
break;
case "appSubMenu3ToolStripMenuItem":
thisMenu = appSubMenu3ToolStripMenuItem;
break;
}
thisMenu.Text = subNode.Attributes["Text"].InnerText;
thisMenu.Visible = Boolean.Parse(subNode.Attributes["Visible"].InnerText);
}
}
这个接口定义了一个函数
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section);
需要在这个函数里面对section的内容进行解析,然后讲结果返回
例如:
class AppMenuSectionHandler:IConfigurationSectionHandler
{
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section)
{
return section;
}
}
4)在要获得section里面数据的程序内部进行如下调用
System.Configuration.ConfigurationManager.GetSection("AppMenuSection");
这个GetSection方法将会自动调用 3)步中实现的IConfigurationSectioinHandler接口中实现的函数,返回值自然是在函数实现过程中定义的返回值
例如:
private void ProcessCustomerConfiguration()
{
XmlNode myAppSettingsNode = (XmlNode)(System.Configuration.ConfigurationManager.GetSection("AppMenuSection"));
XmlNode myMenuNode = myAppSettingsNode.SelectSingleNode("DisplayMenus");
foreach (XmlNode subNode in myMenuNode.SelectNodes("DisplayMenu"))
{
ToolStripMenuItem thisMenu=null;
switch (subNode.Attributes["MenuItem"].InnerText)
{
case "appSubMenu1ToolStripMenuItem":
thisMenu = this.appSubMenu1ToolStripMenuItem;
break;
case "appSubMenu2ToolStripMenuItem":
thisMenu = appSubMenu2ToolStripMenuItem;
break;
case "appSubMenu3ToolStripMenuItem":
thisMenu = appSubMenu3ToolStripMenuItem;
break;
}
thisMenu.Text = subNode.Attributes["Text"].InnerText;
thisMenu.Visible = Boolean.Parse(subNode.Attributes["Visible"].InnerText);
}
}
浙公网安备 33010602011771号