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

自己写的一个使用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  256

class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
glib-2.58.0-win64-vs2017-v141-sdk10.0.17134.12 csdn-tags: glib-2.58.0 x64 vs2017v141 sdk17134 glib-2.58.0及其依赖包: bzip2-1.0.6-win64-vc141.zip glib-2.58.0-win64-vc141.zip libiconv-1.15-win64-vc141.zip libintl-0.19.8.1-win64-vc141.zip pcre-8.42-win64-vc141.zip zlib1-1.2.11-win64-vc141.zip 其中: glib依赖 libintl pcre zlib intl依赖 libiconv pcre依赖 bzip2 zlib glib的编译方法: 1,准备工具:msvc2017,python3,python需要安装 meson 和 ninja,直接pip install即可。 2,准备glibglib需要dirent的支持,否则在编译时会提示无法解析外部符号的错误。解决方法为: 将根目录\build\win32\dirent目录下的二个C文件和一个H文件拷贝到根目录\glib目录下。 3,修改根目录\glib目录下的meson.build文件,字符全是英文半角: glib_sub_headers = files处添加: glib_sub_headers = files( 'dirent.h', glib_sources = files处添加: glib_sources = files( 'dirent.c', 'wdirent.c', 打开vs2017的:适用于 VS 2017的 X64 本机工具命令提示: 或者 call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64 假设python安装在D:\platform\python3 则,Scripts目录一定要添加,否则meson.py会找不到: set PYTHONPATH=D:\platform\python3 set PATH=%PATH%;%PYTHONPATH%;%PYTHONPATH%\Scripts\ 然后,创建编译目录,meson用一个新的目录编译源码: mkdir glib-2.58.0-win64-vc141 cd glib-2.58.0-win64-vc141 meson.py ..\glib-2.58.0 --prefix=D:\platform\glib --buildtype=minsize ninja ninja install 就可以完美编译。 欢迎朋友们下载使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值