共用版 
.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. 简单的积雪shader

    // Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject' Shader "Custom/CoverSnow&q ...

  2. 七. PHP模式设计----运行及描写叙述任务

    1. 解析器模式 //解析器内容类 //用于存放表达式的运算结果,并且能依据传入的表达式返回当初记录的结果 class InterpreterContext{ private $expressions ...

  3. 二、Android应用的界面编程(六)ProgressBar及其子类[SeekBar、RatingBar]er

    通常用于向用户显示某个耗时操作完成的百分比.Android支持几种风格的进度条,通过style属性可以为ProgressBar指定风格.该属性支持如下几个属性值. # @android:style/W ...

  4. Ajax 中的高级请求和响应

    一.概述 在本文中,重点介绍这个请求对象的 3 个关键部分的内容: 1.HTTP 就绪状态 2.HTTP 状态代码 3.可以生成的请求类型 这三部分内容都是在构造一个请求时所要考虑的因素:但是介绍这些 ...

  5. 九度OJ 1325:Battle Over Cities(城市间的战争) (并查集)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:376 解决:132 题目描述: It is vitally important to have all the cities connect ...

  6. 【python】-- Socket接收大数据

    Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...

  7. Webpack探索【1】--- 基础知识

    本文主要说明Webpack的一些基础内容.

  8. MainWindows

    开发带有菜单栏状态栏等常用windows应用时候使用

  9. PHP保存数组到文件中的方法

    ThinkPHP自3.1以后的版本,F函数保存数组时先序列化后再保存到文件中,因为我需要使用C方法来读取自定义配置文件,故需要把PHP数组保存到文件中以便C方法读取,PHP保存数组到文件的方法如下: ...

  10. JSON for java

    一.JSON介绍 JSON(JavaScript Object Notation),类似于XML,是一种数据交换格式,比如Java产生了一个数据想要给JavaScript,则除了利用XML外,还可以利 ...