配置文件为ini的格式,内容为:
#登陆用户
[User]
USERNAME = lpp
PASSWORD = lpp0000
[User]是段域
USERNAME和PASSWORD是子项,=后面是子项对应的值
函数实现为:
/******************************************************************************
* 函数名: GetKeyValue
* 函数功能:根据所谓关键字获取值
* 输入: szBuffer:行内容
iPos 从哪个位置开始开始搜索"="位置
szOutBuffer 输出值内容
* 返回值: 0成功,其他失败
*******************************************************************************/
int GetKeyValue(char *szBuffer, int iPos,char *szOutBuffer)
{
int iIndex = 0;
int iBufLen = strlen( szBuffer );
iIndex = iPos;
while ( iIndex < iBufLen)
{
if ( szBuffer[iIndex] == '=' )
{
iIndex++;
break;
}
iIndex++;
}
if ( iIndex < iBufLen )
{
strcpy(szOutBuffer,szBuffer + iIndex );
}
printf ("%s",szOutBuffer);
return 0;
}
/******************************************************************************
* 函数名: ReadParaFromConfigFile
* 函数功能:从配置文件读取参数
* 输入: szFileName:文件完整路径
szSegName 段名
szKeyName
* 返回值: 0成功,其他失败
*******************************************************************************/
int ReadParaFromConfigFile(char *szFileName,char *szSegName,char *szKeyName,char *szOutBuffer)
{
FILE *pConfigFile;
bool bFoundFlag = false;
char szBuffer[40]={0};
char szSegmentName[30]={0};
//构造段名
sprintf(szSegmentName,"[%s]",szSegName);
//以只读文件打开配置文件
if (( pConfigFile = fopen(szFileName,"r" )) == NULL )
{
printf("打开%s文件错误!\n",szFileName );
return -1;
}
while ( !feof( pConfigFile ))
{
//从参数文件中读入一行
fgets( szBuffer,40,pConfigFile );
//#是注释语句,过滤掉
if (szBuffer[0]=='#')
{
continue;
}
printf("szBuffer=%s\n",szBuffer);
//找到对应的值,并且找到下一个段
if ( szBuffer[0] == '[' )
{
//查找本段开始位置
if ( strncmp( szBuffer,szSegmentName,strlen( szSegmentName )) == 0 )
{
bFoundFlag = true;
}
}
//查找段域里的子项目
if (bFoundFlag)
{
if (strncmp(szBuffer,szKeyName,strlen( szKeyName )) == 0)
{
//获取KEY所对应的值。
GetKeyValue( szBuffer,strlen(szKeyName),szOutBuffer );
break;
}
}
}
if (szOutBuffer==NULL)
{
return -1;
}
fclose( pConfigFile );
return 0;
}