共用版 
.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. Configure the modules to be find by modprobe

    sudo ln -s /path/to/module.ko /lib/modules/`uname -r` sudo depmod -a #depmod will output a dependenc ...

  2. cf 251 B Playing with Permutations 暴力 分类讨论

    题链;http://codeforces.com/problemset/problem/251/B B. Playing with Permutations time limit per test 2 ...

  3. 自己定义Application的未捕获异常处理

    近期由于工作原因.进行Android应用开发时发现应用在出现类似空指针等异常时,抛出未被捕获的异常.Android系统有默认的未捕获异常处理器,默认行为是结束对应的线程,但并不会直接退出程序,并且在应 ...

  4. lua调试小技巧

    lua中,如果碰到某个属性值改变了,但是修改的地方又特别多,调试就特别麻烦了,有个小技巧,直接贴代码 local m = {    __index = function( t, k )         ...

  5. 洛谷 P2051 [AHOI2009]中国象棋

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...

  6. css position: relative,absolute具体解释

    关于CSS中 position在布局中非常重要,查了非常多资料都说的非常难理解.以下说说个人的理解: 语法: position: relative | absolute relative: 对象遵循常 ...

  7. dva+antd写的一个react例子--服务器nginx 的配置

    location ^~ /crm { rewrite ^/crm/(.*)(\.js|\.css|\.png|\.jpg|\.jpeg|\.gif|index\.php|robots\.txt)$ / ...

  8. 使用django开发一个博客

    环境: MAC 10.10.5  Yosemite Python 3.73 Django 代码托管 github

  9. python 发送邮件的两种方式【终极篇】

    一,利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from email.mime.text impor ...

  10. DHTMLTree、Dtree和Ztree的学习使用

    一.DHTMLTree是树菜单,允许我们快速开发界面优美,基于Ajax的javascript库.她允许在线编辑,拖拽,三种状态(全选.不选.半选),复选框等模式.同时在加载大数据量的时候,仍然可以保持 ...