[i=s] 本帖最后由 xnwxq 于 2009-8-28 20:32 编辑 [/i]
/* 描述: 本函数可从一INI文件中取得某个组中某个项的值, 并以整数的方式返回
参数: pIniFile INI文件的文件指针. 它取值为 NULL, 则本函数认为该参数的取值非法. 文件应该以 "r" 模式打开.
pSubSet 组的名字. 它取值为 NULL 或它指向一个空串, 则本函数认为该参数的取值非法.
pItem 项的名字. 它取值为 NULL 或它指向一个空串, 则本函数认为该参数的取值非法.
pValue 取得的值放在 pValue 中
返回: 返回 0 表示成功, 这时 pValue 数组中将存放所取得的字符串; 返回 -1 表示文件操作失败;
返回 -2 表示参数非法; 返回 -3 表示INI文件中不包含指定的组或指定的项.
注意: IniFile 必须以标准的INI格式书写, 否则将无法找到所须的项. 该 Ini 文件的每一行的字符数不可多于 250 个. */
int ReadIniFileInt( FILE *pIniFile, const char *pSubSet, const char *pItem, int *pValue ) {
char cTemp[256], *pTemp;
unsigned uLen;
if ( ( pIniFile == NULL ) || ( pSubSet == NULL ) || ( pItem == NULL ) || ( pValue == NULL ) ) return -2;
if ( ( *pSubSet == '\0' ) || ( *pItem == '\0' ) ) return -2;
rewind( pIniFile );
uLen = strlen( pSubSet );
if ( !uLen ) return -2;
while ( 1 ) {
if ( fscanf( pIniFile, "%s", cTemp ) == EOF ) break;
for ( pTemp = cTemp; ( *pTemp == ' ' ) || ( *pTemp == '\t' ); pTemp ++ );
if ( *pTemp == '[' ) {
for ( pTemp ++; ( *pTemp == ' ' ) || ( *pTemp == '\t' ); pTemp ++ );
if ( !strncmp( pTemp, pSubSet, uLen ) ) break;
}
}
uLen = strlen( pItem );
if ( !uLen ) return -2;
while ( 1 ) {
if ( fscanf( pIniFile, "%s", cTemp ) == EOF ) break;
for ( pTemp = cTemp; ( *pTemp == ' ' ) || ( *pTemp == '\t' ); pTemp ++ );
if ( *pTemp == '[' ) return -3;
if ( !strncmp( pTemp, pItem, uLen ) ) {
pTemp = strrchr( pTemp, '=' );
for ( pTemp ++; ( *pTemp == ' ' ) || ( *pTemp == '\t' ); pTemp ++ );
*pValue = atoi( pTemp );
return 0;
}
}
return -3;
}
|