一个使用glib库访问windows平台ini格式的配置文件的类

来源:互联网 发布:java sso单点登录实例 编辑:程序博客网 时间:2024/04/28 14:40

自己写的一个使用glib库访问windows平台ini格式的配置文件的类CConfig。只实现了读写32位整数,64位整数和字符串功能。

/*************************************************************************> File Name: CConfig.h> Author: > Mail: > Created Time: 2016年08月03日 星期三 09时52分13秒 ************************************************************************/#ifndef _CCONFIG_H#define _CCONFIG_H#include <glib.h>#define ERROR_INFO_LEN 65535#define FILE_PATH_LEN  256class CConfig{public:        char* errorinfo;        char* filePath;        CConfig();        ~CConfig();        bool loadConfig(const char* file);        bool saveConfig();        bool getInt(const char* group,const char* key,int *value);        bool getInt64(const char* group,const char* key,long long *value);        bool getStr(const char* group,const char* key,char *value);        bool setInt(const char* group,const char* key,int value);        bool setInt64(const char* group,const char* key,long long value);        bool setStr(const char* group,const char* key,const char* value);private:        GKeyFile *keyfile;};#endif


/*************************************************************************> File Name: CConfig.cpp> Author: > Mail: > Created Time: 2016年08月03日 星期三 10时02分48秒 ************************************************************************/#include <errno.h>#include <stdio.h>#include <ctype.h>#include <string.h>#include <glib.h>#include <stdlib.h>#include "CConfig.h"CConfig::CConfig(){    keyfile = NULL;    errorinfo = (char*)malloc(ERROR_INFO_LEN);    filePath = (char*)malloc(FILE_PATH_LEN);}CConfig::~CConfig(){    if(keyfile)        g_key_file_free(keyfile);    free(errorinfo);    free(filePath);}bool CConfig::loadConfig(const char* file){    memset(errorinfo,0,ERROR_INFO_LEN);    memset(filePath,0,FILE_PATH_LEN);    if(strlen(file) > FILE_PATH_LEN)    {       sprintf(errorinfo,"[CConfig.cpp][CConfig::loadConfig(const char* file)][配置文件路径过长]");       return false;    }   GError* err = NULL;   keyfile = g_key_file_new();    g_key_file_set_list_separator(keyfile,',');   if(!g_key_file_load_from_file(keyfile,file,(GKeyFileFlags)0,&err))   {       sprintf(errorinfo,"[CConfig.cpp][CConfig::loadConfig(const char* file)][can not load %s fail:%s]",file,err->message);       g_error_free(err);       return false;   }   return true;}bool CConfig::saveConfig(){    GError* err = NULL;    if(g_key_file_save_to_file(keyfile,filePath,&err))       {       sprintf(errorinfo,"[CConfig.cpp][CConfig::saveConfig()][保存配置文件%s失败. fail:%s]",filePath,err->message);        return false;    }    return true;}bool CConfig::getInt(const char* group,const char* key,int *value){    memset(errorinfo,0,sizeof(errorinfo));   GError *err = NULL;   *value = g_key_file_get_integer(keyfile,group,key,&err);   if(err)   {       sprintf(errorinfo,"[CConfig.cpp][CCConfig::getInt(const char* group,const char* key,int &value)][error occur. fail:%s]",err->message);       return false;   }   return true;}bool CConfig::getInt64(const char* group,const char* key,long long *value){    memset(errorinfo,0,sizeof(errorinfo));   GError *err = NULL;   *value = g_key_file_get_int64(keyfile,group,key,&err);   if(err)   {       sprintf(errorinfo,"[CConfig.cpp][CCConfig::getInt64(const char* group,const char* key,int &value)][error occur. fail:%s]",err->message);       return false;   }   return true;}bool CConfig::getStr(const char* group,const char* key,char *value){    memset(errorinfo,0,sizeof(errorinfo));   GError *err = NULL;   char* val = g_key_file_get_string(keyfile,group,key,&err);   if(err)   {       sprintf(errorinfo,"[CConfig.cpp][CCConfig::getStr(const char* group,const char* key,char *value)][error occur. fail:%s]",err->message);       return false;   }   if(strlen(val) > sizeof(value))   {       sprintf(errorinfo,"[CConfig.cpp][CCConfig::getStr(const char* group,const char* key,int &value)][读取的配置内容的大小超过了存储缓冲区]");       return false;   }   memcpy(value,val,strlen(val));   return true;}bool CConfig::setInt(const char* group,const char* key,int value){   g_key_file_set_integer(keyfile,group,key,value);   return true;}bool CConfig::setInt64(const char* group,const char* key,long long value){   g_key_file_set_int64(keyfile,group,key,value);   return true;}bool CConfig::setStr(const char* group,const char* key,const char* value){   g_key_file_set_string(keyfile,group,key,value);   return true;}













0 0
原创粉丝点击