#include "ace/OS.h"
#include "ace/OS_Main.h"
#include "ace/Configuration.h"
#include "ace/Configuration_Import_Export.h"
#include <iostream>
#include <string>
#ifdef _DEBUG
#pragma comment ( lib, "aced.lib" )
#else
#pragma comment ( lib, "ace.lib")
#endif
struct Config_Info
{
ACE_TString person_name;
ACE_TString person_sex;
ACE_TString dog_name;
ACE_TString dog_sex;
int person_age;
int dog_age;
};
int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
Config_Info config_info;
ACE_Configuration_Heap config_;
config_.open();
ACE_Ini_ImpExp ini_impexp (config_);
ini_impexp.import_config (argv[1]);
ACE_Configuration_Section_Key section_person;
int ret = config_.open_section (config_.root_section(),
ACE_TEXT ("PERSON"), 0, section_person);
ret = config_.get_string_value (section_person, ACE_TEXT ("name"),
config_info.person_name);
ret = config_.get_string_value (section_person, ACE_TEXT ("sex"),
config_info.person_sex);
ACE_TString person_age;
ret = config_.get_string_value (section_person,
ACE_TEXT ("age"), person_age);
config_info.person_age = ACE_OS::atoi ( person_age.c_str() );
ACE_Configuration_Section_Key section_dog;
config_.open_section (config_.root_section(), ACE_TEXT ("DOG"), 0, section_dog);
config_.get_string_value ( section_dog, ACE_TEXT ("name"), config_info.dog_name );
config_.get_string_value ( section_dog, ACE_TEXT ("sex"), config_info.dog_sex );
ACE_TString dog_age;
config_.get_string_value (section_dog, ACE_TEXT ("age"), dog_age);
config_info.dog_age = ACE_OS::atoi (dog_age.c_str());
std::cout << config_info.person_name << "/n" << config_info.person_age << "/n"
<< config_info.person_sex << "/n" << config_info.dog_name << "/n"
<< config_info.dog_age << "/n" << config_info.dog_sex << std::endl;
system ("pause");
return 0;
}
这里一共用到3个类分别是;
ACE_Configuration_Heap
ACE_Configuration_Section_Key
ACE_Ini_ImpExp
首先初始化一个ACE_Configuration_Heap用来存储读取配置文件获得的信息。
ACE_Configuration_Heap.open() 用来为Heap分配空间。
接着创建一个ACE_Ini_ImpEXP对象。ACE_Ini_ImpExp的基本功能是一个适配器,通过它的import_config初始化ACE_Configuration_Heap的SECTION_MAP成员。
因为ini配置文件是把配置项分成很多个section。
通过ACE_Configuration_Heap的open_section()方法初始化一个ACE_Configuration_Section_Key对象用来保存某个特定的section.
最后通过ACE_Configuration_Heap的get_string_value() get_integer_value()和get_binary_value()方法获得配置项的value。这3个方法分别对应的是3种存储方式,按字符存储,按integer存储或按二进制存储。我们一边的配置项都是用string存储的,所以多数是用get_string_value的。