VS c++读取配置文件config.ini

引用头文件

#include<windows>

函数介绍

主要用到函数说明:

  • GetPrivateProfileInt(LPCSTR lpAppName, LPCSTR lpKeyName,INT nDefault,LPCSTR lpFileName);
  • GetPrivateProfileString(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpDefault,LPSTR lpReturnedString,DWORD nSize,LPCSTR lpFileName);
  • WritePrivateProfileString(LPCSTR lpAppName,LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName);

参数说明:

  • LPCSTR lpAppName 指的是配置文件的节的名称
  • LPCSTR lpKeyName 指的是配置文件的节中的key的名称
  • INT nDefault 指的是获取当前key时,若当前key不存在则返回默认值。默认值可置0.
  • LPCSTR lpFileName 指的是配置文件的位置。
  • LPCSTR nDefault  指的是获取当前key时,若当前key不存在则返回默认值。默认值可置NULL.
  • LPSTR lpReturnedString 指的是存放当前key的value值的参数。
  • DWORD nSize 这个值要大于key的value值得长度,才能正确获取到value值。
  • LPCSTR lpString 指的是key的value值。

代码

config.ini

[type]
type=家禽-野生动物-中药
[家禽]
num=3
value1=猫
value2=狗
value3=鸡
[野生动物]
num=3
value1=狼
value2=大象
value3=狮子
[中药]
num=2
value1=当归
value2=人参

LPTSTR与string相互转化

//string to LPTSTR 
LPTSTR Lkey = new char[512];
string skey = "key";
Lkey = const_cast<char *>(skey.c_str());
//LPTSTR to string
LPTSTR Lvalue = "当归";
string svalue = (string)Lvalue;

代码

int main()
{ 
    double start = GetTickCount();
    std::string types,stemp,svalue,sret;
    int num = 0;
    LPTSTR Value = new char[1024];
    LPTSTR Ltemp = new char[512];
    LPTSTR Lkey = new char[512];
    std::vector<std::string>vtype;
    bool bflag=true;
    LPTSTR lpPath = ".\\config.ini";

    GetPrivateProfileString("type", "type", "NULL", Value, 512, lpPath);
    types = (std::string)Value;
    while (bflag)
    {
	    stemp = types.substr(types.find_last_of("-") + 1, types.size());
	    types = types.substr(0, types.find_last_of("-"));
    	vtype.emplace_back(stemp);
	    if (types.find("-") == std::string::npos)
    	{
	    	vtype.emplace_back(types);
		    bflag = false;
    	}
    }
    for (const auto &it : vtype)
    {
	    printf("[%s]::", it.c_str());
    	Ltemp = const_cast<char *>(it.c_str());
	    num = GetPrivateProfileInt(Ltemp, "num", 0, lpPath);
    	printf("[%d]", num);
	    for (int i = 0; i < num; i++)
    	{
	    	std::string skey = "value";
		    skey = skey + std::to_string(i + 1);
    		Lkey = const_cast<char *>(skey.c_str());
	    	GetPrivateProfileString(Ltemp, Lkey, "NULL", Value, 100, lpPath);
		    svalue = (std::string)Value;
    		printf("[%s]", svalue.c_str());
	    }
    	printf("\n");
    }
    double end = GetTickCount();
    double total = (end - start) / 1000;
    printf("%.8lf\n", total);
    system("pause");
    return 0;
}

尊重原创,转载请留地址。^o^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值