共用版 
.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. C语言基础知识【常量】

    C 常量1.常量是固定值,在程序执行期间不会改变.这些固定的值,又叫做字面量.常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量.常量就像是常规的变量,只不过 ...

  2. Http权威指南学习研究

    学习时间:                                   该学习:第六章  6.6小节   加油   185页 2017年5月15日15:13:00 今天任务: 看完前两章节: ...

  3. 白昼夢 / Daydream(模拟)

    C - 白昼夢 / Daydream Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You ...

  4. ubuntu问题: 同时只能有一个软件管理工具在运行

    或者是: 只能同时运行一个更新管理器 打开终端输入命令:sudo dpkg –configure -a 运行,系统问题就解决了

  5. mybatis相关

    1 namespace dao中使用namespace+id一起来完成对mapper中sql statement的调用. 2 关于resultMap和parameterType parameterTy ...

  6. 广告 竞价排名 import Levenshtein as Le seqratio_res = Le.seqratio(chk_name_lsit, cmp_)

    pip install python-Levenshtein from openpyxl import Workbook import xlrd import time import Levensht ...

  7. Day 1 :成功完成注册

        今天成功完成了cnblogs的注册,之后会在这里开业咯!记录下此刻时间

  8. MySQL登陆数据库

    下面是几种登陆到MySql数据库的登陆方式代码 1mysql -u root -ppassword 2.mysql -u root -p Enter password:password3.mysql ...

  9. ElasticSearch(十七)初识倒排索引

    现在有两条document: doc1:I really liked my small dogs, and I think my mom also liked them. doc2:He never ...

  10. Linux里的发消息

    1.给指定用户发送消息 语法: write 用户名 说明: 1.用户是在线的 2.执行过程 a.敲完命令按回车,进入写信模式 b.写信的时候如果写错了Ctrl+退格 删除字符 c.写完以后Ctrl+D ...