参数文件操作类。
// CIniFile类操作的文件是xml格式的参数文件,例如:
/*
* 文件名:hssms.xml
<?xml version="1.0" encoding="gbk" ?>
<root>
<logpath>/log/hssms</logpath>
<connstr>hssms/smspwd@hssmszx</connstr>
<datapath>/data/hssms</datapath>
<serverip>192.168.1.1</serverip>
<port>5058</port>
<online>true</online>
</root>
*/
类声明
class CIniFile
{
public:
string m_xmlbuffer;
CIniFile();
bool LoadFile(const char *filename);
bool GetValue(const char *fieldname,bool *value);
bool GetValue(const char *fieldname,int *value);
bool GetValue(const char *fieldname,unsigned int *value);
bool GetValue(const char *fieldname,long *value);
bool GetValue(const char *fieldname,unsigned long *value);
bool GetValue(const char *fieldname,double *value);
bool GetValue(const char *fieldname,char *value,const int ilen=0);
};
实现类
CIniFile::CIniFile()
{
}
bool CIniFile::LoadFile(const char *filename)
{
m_xmlbuffer.clear();
CFile File;
if ( File.Open(filename,"r") == false) return false;
char strLine[501];
while (true)
{
memset(strLine,0,sizeof(strLine));
if (File.FFGETS(strLine,500) == false) break;
m_xmlbuffer=m_xmlbuffer+strLine;
}
if (m_xmlbuffer.length() < 10) return false;
return true;
}
bool CIniFile::GetValue(const char *fieldname,bool *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
bool CIniFile::GetValue(const char *fieldname,char *value,int ilen)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value,ilen);
}
bool CIniFile::GetValue(const char *fieldname,int *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
bool CIniFile::GetValue(const char *fieldname,unsigned int *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
bool CIniFile::GetValue(const char *fieldname,long *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
bool CIniFile::GetValue(const char *fieldname,unsigned long *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
bool CIniFile::GetValue(const char *fieldname,double *value)
{
return GetXMLBuffer(m_xmlbuffer.c_str(),fieldname,value);
}
测试
配置文件格式如下:
<?xml version="1.0" encoding="gbk" ?>
<root>
<logpath>/log/hssms</logpath>
<connstr>hssms/smspwd@hssmszx</connstr>
<datapath>/data/hssms</datapath>
<serverip>192.168.1.1</serverip>
<port>5058</port>
<online>true</online>
</root>
---测试代码
struct st_args
{
char logpath[301];
char connstr[101];
char datapath[301];
char serverip[51];
int port;
bool online;
}stargs;
int main(int argc,char *argv[])
{
if (argc != 2)
{
printf("\nusing:/project/public/demo/demo45 inifile\n");
printf("samples:/project/public/demo/demo45 /project/public/ini/hssms.xml\n\n");
return -1;
}
CIniFile IniFile;
if (IniFile.LoadFile(argv[1])==false)
{
printf("IniFile.LoadFile(%s) failed.\n",argv[1]); return -1;
}
memset(&stargs,0,sizeof(struct st_args));
IniFile.GetValue("logpath",stargs.logpath,300);
IniFile.GetValue("connstr",stargs.connstr,100);
IniFile.GetValue("datapath",stargs.datapath,300);
IniFile.GetValue("serverip",stargs.serverip,50);
IniFile.GetValue("port",&stargs.port);
IniFile.GetValue("online",&stargs.online);
printf("logpath=%s\n",stargs.logpath);
printf("connstr=%s\n",stargs.connstr);
printf("datapath=%s\n",stargs.datapath);
printf("serverip=%s\n",stargs.serverip);
printf("port=%d\n",stargs.port);
printf("online=%d\n",stargs.online);
}