利用ACE来读取配置文件需要用到ACE_Configuration类的子类。ACE_Configuration类仅仅为配置数据库提供了必须的接口,它的子类ACE_Configuration_Heap和ACE_Configuration_Win32Registry则实现了这些接口。应用时则采用这两个子类来完成功能。
ACE_Configuration_Heap用ACE的分配器来管理表征配置数据库的内存。一个持久化得堆能够用来持久化的保存配置信息。
读取配置信息用到的另一个类为ACE_Config_ImpExp_Base。该类是从文件导入/导出配置信息的基类。该类为保存在文件中的配置对象提供了基础功能,它需要一个ACE_Configuration对象来管理数据。ACE_Ini_ImpExp类能够通过文件名导入标准的.ini文件和.conf文件。
关键代码如下所示:
int GetCfgFromIni(const char* pchAppName,//节点名
const char* pchKeyName,//关键字名
const char* pchFileName)//文件名
{
int iRet = 0;
ACE_Configuration_Heap cf;
if( cf.open() == 0 )//使用ACE_Configuration对象前必须首先调用该函数
{
ACE_Ini_ImpExp import(cf);
if (import.import_config( pchFileName )==0)//通过文件名来导入配置信息
{
const ACE_Configuration_Section_Key &root = cf.root_section ();
ACE_Configuration_Section_Key Section;
if( cf.open_section( root, pchAppName, 0, Section ) == 0) //0表示该节点必须存在
{
unsigned int nValue;
ACE_TString strV;
if(cf.get_string_value( Section, pchKeyName, strV )==0)
{
sscanf( strV.c_str(), "%d", &nValue );
iRet = nValue;
}
else
{
iRet = -1
}
}
else
{
iRet = -1;
}
}
else
{
iRet = -1;
}
}
else
{
iRet = -1;
}
return iRet;
}