#pragma once
/**********************************************
* 作者:wujianhua
* 时间:2020/12/05
* 类介绍:ini配置文件封装
*
***********************************************/
#include <string>
class CIni
{
public:
CIni();
~CIni();
/**********************************************
* 作者:wujianhua
* 时间:2020/12/05
* 函数:读取ini配置文件字符串数据
* 参数:
* title:主标记值 如[test] 传递test
* key:子标记值 如sub=1 传递sub
* 返回:
* 成功返回对应的子标记值数据
***********************************************/
const char *GetIniKeyString(const char *title, const char *key, const char *filename);
/**********************************************
* 作者:wujianhua
* 时间:2020/12/05
* 函数:读取ini配置文件整形数据
* 参数:
* title:主标记值 如[test] 传递test
* key:子标记值 如sub=1 传递sub
* 返回:
* 成功返回对应的子标记值数据
***********************************************/
int GetIniKeyInt(const char *title, const char *key, const char *filename);
double GetInitKeyDouble(const char *title, const char *key, const char *filename);
private:
std::string _values="";
std::string _crrentBinPath;
};
#include "Ini.h"
#include <stdio.h>
CIni::CIni()
{
}
CIni::~CIni()
{
}
const char * CIni::GetIniKeyString(const char *title, const char *key, const char *filename)
{
FILE *fp;
char szLine[1024];
static char tmpstr[1024];
int rtnval;
int i = 0;
int flag = 0;
char *tmp;
if ((fp = fopen(filename, "r")) == NULL)
{
printf("have no such file \n");
return _values.c_str();
}
while (!feof(fp))
{
rtnval = fgetc(fp);
if (rtnval == EOF)
{
break;
}
else
{
szLine[i++] = rtnval;
}
if (rtnval == '\n')
{
#ifndef WIN32
i--;
#endif
szLine[--i] = '\0';
i = 0;
tmp = strchr(szLine, '=');
if ((tmp != NULL) && (flag == 1))
{
if (strstr(szLine, key) != NULL)
{
//注释行
if ('#' == szLine[0])
{
}
else if ('\/' == szLine[0] && '\/' == szLine[1])
{
}
else
{
//找打key对应变量
strcpy(tmpstr, tmp + 1);
fclose(fp);
_values = tmpstr;
return _values.c_str();
}
}
}
else
{
strcpy(tmpstr, "[");
strcat(tmpstr, title);
strcat(tmpstr, "]");
if (strncmp(tmpstr, szLine, strlen(tmpstr)) == 0)
{
//找到title
flag = 1;
}
}
}
}
fclose(fp);
return _values.c_str();
}
int CIni::GetIniKeyInt(const char *title, const char *key, const char *filename)
{
return atoi(GetIniKeyString(title, key, filename));
}
double CIni::GetInitKeyDouble(const char *title, const char *key, const char *filename)
{
return atof(GetIniKeyString(title, key, filename));
}