c/c++ 对ini配置文件如何进行访问?
Qt开发环境: 利用QSetting类可以直接调用接口访问
windows系统: windows.h 有相关的函数接口调用,如:WritePrivateProfileString、WritePrivateProfileStruct、GetPrivateProfileString 、GetPrivateProfileInt、GetPrivateProfileStruct
linux系统: 通过读取文件去实现或者脚本文件
纯c语言如何进行ini文件的访问? 解决代码如下:
//从INI文件读取字符串类型数据
char *GetIniKeyString(char *title,char *key,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("open file failed!\n");
return "";
}
while(!feof(fp))
{
rtnval = fgetc(fp);
if(rtnval == EOF)
{
break;
}
else
{
szLine[i++] = rtnval;
}
if(rtnval == '\n')
{
szLine[--i] = '\0';
i = 0;
//过滤注释
if(szLine[0] == '#' || (szLine[0]=='/' && szLine[1]=='/'))
{
memset(szLine,0,sizeof(szLine));
continue;
}
tmp = strchr(szLine, '=');
if(( tmp != NULL )&&(flag == 1))
{
if(strstr(szLine,key)!=NULL)
{
//过滤其值为注释的变量
if(tmp[1] == '#' || (tmp[1]=='/' && tmp[2]=='/'))
{}
else
{
//排除多余的空格
int extr_num=0;
for(int i=1;i<strlen(tmp);i++)
{
if(tmp[i]==' ')
extr_num++;
else
break;
}
//key对应变量
strcpy(tmpstr,tmp+1+extr_num);
fclose(fp);
}
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if( strncmp(tmpstr,szLine,strlen(tmpstr)) == 0 )
{
//找到title
flag = 1;
}
memset(tmpstr,0,sizeof(tmpstr));
}
}
}
fclose(fp);
return "";
}
test配置文件:
[AES]
//sdadsaldadajkldjlaks
#32位的16进制密钥
key = 0323232323232323bacde342345f334
age= 5
name=#fmdskfmsk
ss=//fnsdjfknsdkf
dd=
经过demo测试能够成功的获取和排除可能出现的问题。