跨平台INI封装

#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));
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值