共用版 
.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. 【BZOJ2006】[NOI2010]超级钢琴 ST表+堆

    [BZOJ2006][NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以 ...

  2. z-index随笔

    z-index这个css属性是用来控制层级的,但是它的表现有点奇怪,这里做下记录. 假如有ABC三层,都没设置z-index时,是按dom节点顺序来控制层级. 此时如果B元素下有个元素D,设置了z-i ...

  3. bash编程基础

    bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...

  4. 算法设计 mac 字符串 标识 n维度 2 3维度 字符串 标识值 特征值

    基向量

  5. SSH 占用数据库连接不释放问题

    SSH框架的项目在訪问数据库的时候.訪问完毕后一直占用链接,不释放.导致过了一段时间后,server没挂,就是有訪问数据库的连接是时候.一直卡住 解决的方法:   1.配置spring相应的hiber ...

  6. Android Message handling (based on KK4.4)

    一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列.存放消息的地方.每个线程最多仅仅能够拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自 ...

  7. 论文解析 "A Non-Local Cost Aggregation Method for Stereo Matching"

    传统的使用窗口的方法缺陷主要在 1.窗口外的像素不能参与匹配判断. 2.在低纹理区域很容易产生错误匹配 论文的主要贡献在代价聚类上(左右图像带匹配点/区域的匹配代价计算),目标是图像内所有点都对该点传 ...

  8. html5 canvas做的图表插件

    用highchart的时候发现它是用svg来画图的,那么用canvas来做怎么样的. 以前做AS图表插件的时候,绘制图画主要用容器的Graphics对象来绘制,而canvas的context和Grap ...

  9. HTML相对路径与绝对路径

    在网页制作的过程中,少不了跟路径打交道,比如,包含一个文件,插入一个图片等,与路径都有关系,如果使用了错误的文件路径,就会导致引用失效(无法浏览链接文件,或无法显示插入的图片等).初学者可能会感到困惑 ...

  10. C#转换人民币大写金额

    /// <summary> /// 转换人民币大写金额. /// </summary> public class RMBConverter { /// <summary& ...