摘要
使用MicrosoftNET开发一个项目时可能包含了Windows应用程序Web应用程序Web ServiceWindows Service等多种应用如果您想使这几个应用程序使用同一个配置(比如同一个数据库连接)而又不想重复编写不同的配置文件那么NET提供的配置文件方案可能就不能达到你的目的了本文介绍一种简单的使用xml格式的配置文件及其使用方法本文假设您的项目有至少一个Windows应用程序一个Web应用程序和一个Window Service应用
配置文件结构
为了使所有应用程序均可访问到该配置文件本实例将配置文件放在WINNT\SYSTEM系统目录下当然读者可以自己定义文件存放的位置但需要注意程序的移植性Windows系统目录可以使用Windows API函数获取但要求使用的WindowsWeb和Window Service应用程序对系统目录有读取的权限
为了方便阐述我们将该配置文件命名为nfig(与微软NET的配置文件扩展名相同)在程序中如果不指定配置文件名则配置文件默认为nfig
配置文件的结构如下读者可以根据自己的需要对配置文件进行添删
<?xml version= encoding=utf?>
<root>
<!Sql Server DB>
<systemdb>
<server>localhost</server>
<uid>sa</uid>
<pwd> </pwd>
<database>Pubs</database>
<pooling>True</pooling>
<maxpoolsize></maxpoolsize>
<minpoolsize></minpoolsize>
<lifetime></lifetime>
</systemdb>
<!Sql Server DB>
<webdb server=localhost
uid=sa
pwd=
database=NorthWind
pooling=True
maxpoolsize=
minpoolsize=
lifetime=
/>
<!—SMTP Server>
<smtpserver server= port= />
</root>
说明可以看到配置有两种形式第一种的配置值直接写在xml节点上另一种将配置值写在节点的属性上下面的章节中将对这两种节点配置的获取和设置分别说明
配置文件采用xml结构关于xml的语法和概念网络上的相关资料很多请读者自己参考网络资源第一个节点使用子节点保存数据库配置通过获取子节点值来获取数据库的配置第二个节点使用节点的属性来保存数据库配置
读取配置
下面将讲述如何使用程序读取nfig配置文件
辅助程序下面的程序段使用Windows API函数获取系统目录
using SystemRuntimeInteropServices;
using SystemText;
[DllImport(kernel)]
private static extern void GetSystemDirectory(StringBuilder SysDirint count);
public string GetSystemDirectory()
{
const int nChars = ;
StringBuilder Buff = new StringBuilder(nChars);
GetSystemDirectory(BuffnChars);
return BuffToString();
}
这里我们先引用了SystemRuntimeInteropServices名称空间然后引用API函数GetSystemDirectory(StringBuilderint)最后重写该方法GetSystemDirectory()方法调用API函数将系统目录作为字符串返回
解析xml文件本例使用XML DOM(Document Object Modal)类来解析xml文件程序片断如下
using SystemXml;
private XmlDocument xmlDoc = new XmlDocument();
private string strConfigFile;
public SystemSetting()
{
strConfigFile = GetSystemDirectory() + @\nfig;
xmlDocLoad(strConfigFile);
}
public string GetConfigValue(string strNodestring strAttribute)
{
string strReturn = ;
try
{
//根据指定路径获取节点
XmlNode xmlNode = xmlDocSelectSingleNode(strNode);
//获取节点的属性并循环取出需要的属性值
XmlAttributeCollection xmlAttr = xmlNodeAttributes;
for(int i= ;i<xmlAttrCount; i++)
{
if (xmlAttrItem(i)Name == strAttribute)
strReturn = xmlAttrItem(i)Value;
}
}
catch(XmlException xmle)
{
throw xmle;
}
return strReturn;
}
public string GetConfigValue(string strNode)
{
string strReturn = ;
try
{
//根据路径获取节点
XmlNode xmlNode = xmlDocSelectSingleNode(strNode);
strReturn = xmlNodeInnerText;
}
catch(XmlException xmle)
{
SystemConsoleWriteLine(xmleMessage);
}
return strReturn;
}
这里我们先引用了SystemXml名称空间在构造函数中指定配置文件到系统目录下的nfig然后使用XmlDocument的Load()方法将该文件读入XmlDocument对象xmlDoc
GetConfigValue(string strNodestring strAttribute)方法读取指定节点的指定属性值如配置文件的节点的server属性
GetConfigValue(string strNode)方法读取指定节点的值如第一节所述配置文件节点的子节点的值
管理配置
下面的程序示例提供管理配置文件的三个主要方法
public void SetConfigValue(string strNodestring newValue)
{
try
{
//根据指定路径获取节点
XmlNode xmlNode = xmlDocSelectSingleNode(strNode);
//设置节点值
xmlNodeInnerText = newValue;
}
catch(XmlException xmle)
{
throw xmle;
}
}
public void SetConfigValue(string strNodestring strAttributestring newValue)
{
try
{
//根据指定路径获取节点
XmlNode xmlNode = xmlDocSelectSingleNode(strNode);
//获取节点的属性并循环取出需要的属性值
XmlAttributeCollection xmlAttr = xmlNodeAttributes;
for(int i= ;i<xmlAttrCount; i++)
{
if (xmlAttrItem(i)Name == strAttribute)
xmlAttrItem(i)Value = newValue;
}
}
catch(XmlException xmle)
{
throw xmle;
}
}
public void SaveConfig()
{
try
{
//保存设置的结果
xmlDocSave(strConfigFile);
}
catch(XmlException xmle)
{
throw xmle;
}
}
SetConfigValue(string strNodestring newValue)用来设置节点值SetConfigValue(string strNodestring strAttributestring newValue)用来设置节点的属性值在修改了配置内容后必须调用SaveConnfig()方法用来将修改过的配置保存到文件
总结
配制文件有许多种形式本文所提的只是一种自己编写的配制文件当然对本文的程序做一点点修改您可以编写出其它各种各样符合程序实际需要的配制文件希望本文对您开发应用程序有些帮助