现在的位置: 首页 > 综合 > 正文

C/C++跨平台ini文件读写API

2013年05月09日 ⁄ 综合 ⁄ 共 2352字 ⁄ 字号 评论关闭
 

昨天写了个一组ini文件读写函数。提供大家使用,已经在XP+VC7.1和FC6+GCC4.1中测试过了,可以跨平台使用。使用标准C写得,支持C++。源程序可以到:我的网络硬盘下载。

/**
*@file             inifile.h
*@cpright        (C)2007 GEC 
*@auther        dengyangjun
*@email        dyj057@gmail.com
*@version        0.1
*@create         2007-1-14 
*@modify        2007-1-14
*@brief            declare ini file operation
*@note
*@history    
*/

#ifndef INI_FILE_H_
#define INI_FILE_H_

#ifdef __cplusplus
extern "C"
{
#endif

int read_profile_string( const char *section, const char *key,char *value, int size, const char *file);
int read_profile_int( const char *section, const char *key,int default_value, const char *file);

int write_profile_string( const char *section, const char *key,const char *value, const char *file);

#ifdef __cplusplus
}; //end of extern "C" {
#endif

#endif //end of INI_FILE_H_

 

/**
*@file             inifile.c
*@cpright        (C)2007 GEC
*@auther        dengyangjun
*@email        dyj057@gmail.com
*@version        0.1
*@create         2007-1-14 
*@modify        2007-1-14
*@brief            implement ini file operation
*@note
*@history    
*/
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<assert.h>
#include 
<string.h>
#include 
<ctype.h>

#include "inifile.h"

#ifdef __cplusplus
extern "C"
{
#endif

#define MAX_FILE_SIZE 8096

#define LEFT_BRACE '['
#define RIGHT_BRACE ']'

static int load_ini_file(const char *file, char *buf,int *file_size)
{
    FILE 
*in = NULL;
    
int i=0;
    
*file_size =0;

    assert(file !=NULL);
    assert(buf 
!=NULL);

    in = fopen(file,"r");
    
if( NULL == in) {
        
return 0;
    }

    //load initialization file
    while((buf[i]=fgetc(in))!=EOF) {
        i
++;
        assert( i 
< MAX_FILE_SIZE); //file too big
    }
    
    buf[i]
='

 

#include <stdio.h>
#include 
"inifile.h"

//main.c
#define BUF_SIZE 256
int main()
{
    
const char *file ="myconfig.ini";
    
const char *section = "Db";
    
const char *key = "XX2";
    
    
char value[BUF_SIZE]={0};
    
    printf(
"test get profile string ");

    if(!read_profile_string(section, key, value, BUF_SIZE, file))
    {
        
        printf(
"read ini file fail ");
    }
    
else
    {
        
int x = read_profile_int(section,key,0,file);
        printf(
"XX2=%d ", x);
        printf(
"read: [%s] = [%s] ",key,value);
    }
    
    
if(!write_profile_string(section,"XX2","2writeOK",file))
    {
        printf(
"write ini file fail ");
    }
    
else
    {
        printf(
"write ini file ok ");
    }
    
    
return 0;
}

抱歉!评论已关闭.