打印

[原创]Linux下的ini文件的操作C模块子程序

[复制链接]
5288|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xnwxq|  楼主 | 2009-8-28 20:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
为了更好的丰富论坛的资源查找,程序只供大家参考。各位大侠发现问题要多多指导!
在下面的阐述中将实现ini的读写和删除ini文件的项
关于INI的文件格式大家可以在网上查找一下,这里就不做详细的说明
'.ini的文件结构:
'.ini 文件是文本文件,中间的数据格式一般为:
'[Section1 Name]
'KeyName1 = value1
'KeyName2 = value2
'...
'[Section2 Name]
'KeyName1 = value1
'KeyName2 = value2
'.ini 文件可以分为几个 Section
'每个 Section 的名称用 [] 括起来
'在一个 Section 中,可以有很多的 Key
'每一个 Key 可以有一个值并占用一行,格式是 Key=value
'FileName:是文件的路径名称
'Section:是.ini的块名称
'KeyName:是.ini的关键字名称
'Value:是.ini的对应的值

/* INI 文件管理模块: 读, 写和删除 INI 文件中的项.
输出函数:
int ReadIniFileInt( FILE *pIniFile, const char *pSubSet, const char *pItem, int *pValue );
int ReadIniFileString( FILE *pIniFile, const char *pSubSet, const char *pItem, char *pValue );
int WriteIniFileString( char *pIniFilePath, const char *pSubSet, const char *pItem, char *pValue );
int DeleteIniFileItem( char *pIniFilePath, const char *pSubSet, const char *pItem );
*/

相关帖子

沙发
xnwxq|  楼主 | 2009-8-28 20:31 | 只看该作者
[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;
}

使用特权

评论回复
板凳
xnwxq|  楼主 | 2009-8-28 20:35 | 只看该作者
本帖最后由 xnwxq 于 2009-8-28 20:37 编辑


我想问一下在发表帖子中如何保持程序的代码风格,我的程序风格如下图所示,复制过来格式就变成上面的格式,感觉比较乱!

使用特权

评论回复
地板
xnwxq|  楼主 | 2009-8-28 20:36 | 只看该作者
/* 描述: 本函数可从一INI文件中取得某个组中某个项的值, 并以字符串的方式返回
参数: pIniFile INI文件的文件指针. 它取值为 NULL, 则本函数认为该参数的取值非法. 文件应该以 "r" 模式打开. pSubSet 组的名字. 它取值为 NULL 或它指向一个空串, 则本函数认为该参数的取值非法. pItem 项的名字. 它取值为 NULL 或它指向一个空串, 则本函数认为该参数的取值非法. pValue 取得的值放在 pValue 中.
返回: 返回 0 表示成功, 这时 pValue 数组中将存放所取得的字符串; 返回 -1 表示文件操作失败; 返回 -2 表示参数非法; 返回 -3 表示INI文件中不包含指定的组或指定的项.
注意: IniFile 必须以标准的INI格式书写, 否则将无法找到所须的项. 该 Ini 文件的每一行的字符数不可多于 250 个. */

使用特权

评论回复
5
qrfbntel| | 2013-1-5 15:52 | 只看该作者
兄弟,在不?你最后一个函数咋个不贴贴呢?我正需要

使用特权

评论回复
6
ymind| | 2013-1-6 09:07 | 只看该作者
Linux下confuse库能实现类似功能,但没有section []支持。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我们都是风雨中的孩子,手牵着手才不会跌倒

162

主题

294

帖子

1

粉丝