共用版 
.h文件

//----------------------------------------------------------------------------

// 程序名称:   ConfigFile.h

// 程序说明:   类 ConfigFile 的定义

// 程序作者:   

// 程序版本:   1.0

// 开始日期:   1999-01-10

//----------------------------------------------------------------------------



#ifndef __CONFIGFILE_H__

#define __CONFIGFILE_H__



#include <fstream>;

#include <iostream>;



using namespace std;



#define MAX_LINE_LENGTH 300



//----------------------------------------------------------------------------

// 类说明:用于对配置文件进行操作,对于给定的节名和变量名,获得变量的值。

//----------------------------------------------------------------------------

class CConfigFile

{

//构造函数和析构函数

private:    //私有

   

protected:  //保护

   

public:     //公有

    CConfigFile();

    CConfigFile(char *pConfigFileName);

    ~CConfigFile();

   



//属性

private:    //私有

    fstream m_CfgFile;

    short     m_IsOpen;  //文件打开状态

    enum

    {

      IS_COMMENT ,    //是注释

      IS_SESSION ,    //是节名

      IS_VALUE,       //是变量的值

      NOT_FOUND       //没有找到指定的变量名

    };

   

protected:  //保护

   

public:     //公有

   



//服务

private:    //私有

    //查找一个指定的节名

    short  GetSession(char *pStr,char *SessionName);

    //获得变量的值

    short GetContent(char *pStr,char *ValueName,char *RetStr);

   

protected:  //保护

   

public:     //公有

    //打开一个指定的配置文件

    short  Open(char *ConfigFileName);

    //关闭配置文件

    void   Close();

    //根据给定的节名和变量名,从文件中读出变量的值

    short  GetValue(char *Session,char *ValueName,char *RetStr);

    //返回文件打开状态

    short  IsOpen() { return m_IsOpen; };

   

};



#endif //__CONFIGFILE_H__







cpp文件

#include "ConfigFile.h"

#include <string.h>;



//----------------------------------------------------------------------------

// 函数原型: CConfigFile::CConfigFile()

// 函数功能: CConfigFile 构造函数

// 传入参数: 无

// 传出参数: 无

// 函数返回: 无

// 注意事项: 无

//----------------------------------------------------------------------------

CConfigFile::CConfigFile()

{

  m_IsOpen = -1;

}



//----------------------------------------------------------------------------

// 函数原型: CConfigFile::CConfigFile(char *pConfigFileName)

// 函数功能: CConfigFile 构造函数

// 传入参数: char *pConfigFileName  配置文件名

// 传出参数: 无

// 函数返回: 无

// 注意事项: 无

//----------------------------------------------------------------------------

CConfigFile::CConfigFile(char *pConfigFileName)

{

  m_IsOpen = -1;

  Open(pConfigFileName);

}



//----------------------------------------------------------------------------

// 函数原型: CConfigFile::~CConfigFile()

// 函数功能: CConfigFile 析构函数

// 传入参数: 无

// 传出参数: 无

// 函数返回: 无

// 注意事项: 无

//----------------------------------------------------------------------------

CConfigFile::~CConfigFile()

{

  if (m_IsOpen == 0)

    m_CfgFile.close();

}



//----------------------------------------------------------------------------

// 函数原型: short  CConfigFile::Open(char *ConfigFileName)

// 函数功能: 打开指定的配置文件

// 传入参数: char *ConfigFileName  配置文件名

// 传出参数: 无

// 函数返回: 0  打开文件成功

//            -1 打开文件失败

// 注意事项: 无

//----------------------------------------------------------------------------

short  CConfigFile::Open(char *ConfigFileName)

{

  //如果已经有一个文件打开,则先关闭

  if ( m_IsOpen == 0 )

  {

    m_CfgFile.close();

    m_IsOpen == -1;

  }

  //打开指定的配置文件,失败返回-1

  m_CfgFile.open(ConfigFileName,ios::in);

  if( !m_CfgFile )

    return -1;



  m_IsOpen = 0;

  return 0;

}



//----------------------------------------------------------------------------

// 函数原型: void CConfigFile::Close()

// 函数功能: 关闭配置文件

// 传入参数: 无

// 传出参数: 无

// 函数返回: 无

// 注意事项: 无

//----------------------------------------------------------------------------

void CConfigFile::Close()

{

  if ( m_IsOpen == 0 )

    m_CfgFile.close();

}



//----------------------------------------------------------------------------

// 函数原型: short  CConfigFile::GetValue(char *Session,char *ValueName,char *RetStr)

// 函数功能: 从配置文件中读出指定的变量的值

// 传入参数: char *Session   变量所在节的名称

//            char *ValueName 变量的名称

//            char *RetStr    存放返回字符串的空间指针

// 传出参数: 无

// 函数返回: 0  读到指定变量的值

//            -1 未读到指定变量的值

// 注意事项: 无

//----------------------------------------------------------------------------

short  CConfigFile::GetValue(char *Session,char *ValueName,char *RetStr)

{

  char          tmpstr[MAX_LINE_LENGTH];

  short          Flag;

  short         Ret;



  m_CfgFile.seekg(0,ios::beg);

  //找到对应的节

  Flag = -1;

  while(!m_CfgFile.eof())

  {

    m_CfgFile.getline(tmpstr,MAX_LINE_LENGTH);

    if ( GetSession(tmpstr,Session) == 0 )

    {

      Flag = 0;

      break;

    }

  }



  if ( Flag == -1 )

    return -1;



  //获得对应的变量的值

  Flag = -1;

  while(!m_CfgFile.eof())

  {

    m_CfgFile.getline(tmpstr,MAX_LINE_LENGTH);

    Ret = GetContent(tmpstr,ValueName,RetStr);

    if (  (Ret == IS_COMMENT) || (Ret == NOT_FOUND))   

      continue;

    else if( Ret == IS_SESSION )

      break;

    Flag = 0;

//    cerr << Session << " " << ValueName << "=" << RetStr << endl;

    break;

  }

  

  return Flag;

}



//----------------------------------------------------------------------------

// 函数原型: short CConfigFile::GetSession(char *pStr,char *SessionName)

// 函数功能: 从指定的字符串中查找一个节(在[]中的字符串)的名称

// 传入参数: char *pStr 指定的字符串

//            char *SessionName 所要查找的节名

// 传出参数: 无

// 函数返回: 0  找到指定的节名

//            -1 未找到指定的节名

// 注意事项: 无

//----------------------------------------------------------------------------

short CConfigFile::GetSession(char *pStr,char *SessionName)

{

  char TmpStr[100];

  int i=0;

  int j = 0;



  while( pStr == ' ' ) i++;   //跳过空格

  

  if( pStr
 != '[' )

    return -1;  //不是节名

  

  i++; //跳过'['

  

  while( pStr == ' ' ) i++; //跳过空格

  

  //获得节名

  while( pStr
 != ' ' &amp;&amp; pStr != ']' )

  {

        TmpStr[j] = pStr
;

        i++;

        j++;

  }

  TmpStr[j] = 0;



  if( strcmp(TmpStr,SessionName) != 0 )

    return -1; //不是指定的节名



  return 0;

}



//----------------------------------------------------------------------------

// 函数原型: short CConfigFile::GetContent(char *pStr,char *ValueName,char *RetStr)

// 函数功能: 从指定的字符串中获得变量的值

// 传入参数: char *pStr      指定的字符串

//            char *ValueName 变量的名称

//            char *RetStr    存放返回字符串的空间指针

// 传出参数: 无

// 函数返回: IS_VALUE 读到变量的值

//            IS_COMMENT 是注释

//            IS_SESSION 是节名

//            NOT_FOUND  没有找到指定的变量名

// 注意事项: 无

//----------------------------------------------------------------------------

short CConfigFile::GetContent(char *pStr,char *ValueName,char *RetStr)

{

  char TmpStr[100];

  int i=0;

  int j = 0;



  RetStr[0] = 0;

  

  while( pStr == ' ' ) i++; //去掉开头的空格



  if( pStr
 == '#' ) return IS_COMMENT;  //是注释

  if( pStr == '[' ) return IS_SESSION;  //是节名

  if( pStr
 == 0   ) return NOT_FOUND;   //已到行尾,未找到

  

  //获得变量名

//  while( pStr != ' ' &amp;&amp; pStr != '=' &amp;&amp; pStr != 0)

//modified by luxd

  while( pStr
 != ' ' &amp;&amp;pStr!='\t' &amp;&amp; pStr != '=' &amp;&amp; pStr != 0)

  {

        TmpStr[j] = pStr
;

        i++;

        j++;

  }

  TmpStr[j] = 0;



  if( strcmp(TmpStr,ValueName) != 0 )

    return NOT_FOUND;  //不是指定的变量

   

//  while( pStr == ' ' || pStr == '=' ) i++; //去掉空格及'='

// modified by luxd

  while( pStr == ' ' || pStr=='\t' || pStr == '=' ) i++; //去掉空格及'='

  

  //获得变量的值

  j=0;

  while( pStr
 >;' ' &amp;&amp; pStr != '#' &amp;&amp; pStr != 127)

  {

    RetStr[j] = pStr;

    i++;

    j++;

  }

  RetStr[j] = 0;

  

  return IS_VALUE;

}

原文地址:http://blog.sina.com.cn/s/blog_67a1496f0100imci.html

c/c++写的比较好的读写配置文件的函数或者类的更多相关文章

  1. 用ConfigParser模块读写配置文件——Python

    对于功能较多.考虑用户体验的程序,配置功能是必不可少的,如何存储程序的各种配置? 1)可以用全局变量,不过全局变量具有易失性,程序崩溃或者关闭之后配置就没了,再者配置太多,将变量分配到哪里也是需要考虑 ...

  2. Python自动化测试 (二) ConfigParser模块读写配置文件

    ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 直接上代码,不解释,不多说. 配置文件的格式是: []包含的叫section,    section 下有op ...

  3. Python自动化测试 -ConfigParser模块读写配置文件

    C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很简单的直接写程序了,不需要做如何配置. 对新手来说,这是非常好的“初体验”, 会激发初学者的自信和兴趣. 而有些语言的开发环 ...

  4. python:利用configparser模块读写配置文件

    在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...

  5. python-ConfigParser模块【读写配置文件】

    对python 读写配置文件的具体方案的介绍 1,函数介绍 import configParser 如果Configparser无效将导入的configParser 的C小写 1.1.读取配置文件 - ...

  6. python 读写配置文件

    使用python读写配置文件,写个demo测试一下. #!/usr/bin/env python import os import ConfigParser # 如果文件不存在,就穿件文件. if o ...

  7. Java读写配置文件——Properties类的简要使用笔记

    任何编程语言都有自己的读写配置文件的方法和格式,Java也不例外. 在Java编程语言中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XM ...

  8. ConfigParser 读写配置文件

    一.ini: 1..ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式 2.ini文件创建方法: (1)先建立一个记事本文件.(2 ...

  9. Python-通过configparser读写配置文件

    Python读写配置文件: 1.创建配置文件(文件名以.conf或.ini结束的文件表示配置文件) 2.导入所需模块 OS, configparser >>> import os & ...

随机推荐

  1. DLX精确覆盖与重复覆盖模板题

    hihoCoder #1317 : 搜索四·跳舞链 原题地址:http://hihocoder.com/problemset/problem/1317 时间限制:10000ms 单点时限:1000ms ...

  2. python函数式编程-------python2.7教程学习【廖雪峰版】(五)

    2017年6月13日19:08:13 任务: 看完函数式编程 笔记: 该看:函数式编程1.函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解 ...

  3. 使用onepage-scroll全屏滚动插件时的注意事项

    如果项目需要在移动端访问时需要设置responsiveFallback属性,并且在此之前还需要检测浏览器的级别(引入modernizr.js文件) var $responsiveFallback = ...

  4. 合唱队形(LIS)

    合唱队形    OpenJ_Bailian - 2711 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同 ...

  5. GridView 显示行号 设置行号列的宽度

    /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv" ...

  6. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

    正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...

  7. pom.xml配置文件详解(转发)

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和li ...

  8. ceph基本架构简述

    1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...

  9. 【转】.net中快捷键的使用

    当前行行首:Home 当前行行尾:End 当前文档首行:ctrl+Home 当前文档尾行:ctrl+End 选中当前行: ① 按Home(定位到行首)然后按Shift+Dnd(行尾)   {从行首连选 ...

  10. 在ubuntu上为android系统编写Linux驱动程序【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的 ...