c/c++写的比较好的读写配置文件的函数或者类
//----------------------------------------------------------------------------
// 程序名称: 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 != ' ' && 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 != ' ' && pStr != '=' && pStr != 0)
//modified by luxd
while( pStr != ' ' &&pStr!='\t' && pStr != '=' && 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 >;' ' && pStr != '#' && pStr != 127)
{
RetStr[j] = pStr;
i++;
j++;
}
RetStr[j] = 0;
return IS_VALUE;
}
原文地址:http://blog.sina.com.cn/s/blog_67a1496f0100imci.html
c/c++写的比较好的读写配置文件的函数或者类的更多相关文章
- 用ConfigParser模块读写配置文件——Python
对于功能较多.考虑用户体验的程序,配置功能是必不可少的,如何存储程序的各种配置? 1)可以用全局变量,不过全局变量具有易失性,程序崩溃或者关闭之后配置就没了,再者配置太多,将变量分配到哪里也是需要考虑 ...
- Python自动化测试 (二) ConfigParser模块读写配置文件
ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 直接上代码,不解释,不多说. 配置文件的格式是: []包含的叫section, section 下有op ...
- Python自动化测试 -ConfigParser模块读写配置文件
C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很简单的直接写程序了,不需要做如何配置. 对新手来说,这是非常好的“初体验”, 会激发初学者的自信和兴趣. 而有些语言的开发环 ...
- python:利用configparser模块读写配置文件
在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...
- python-ConfigParser模块【读写配置文件】
对python 读写配置文件的具体方案的介绍 1,函数介绍 import configParser 如果Configparser无效将导入的configParser 的C小写 1.1.读取配置文件 - ...
- python 读写配置文件
使用python读写配置文件,写个demo测试一下. #!/usr/bin/env python import os import ConfigParser # 如果文件不存在,就穿件文件. if o ...
- Java读写配置文件——Properties类的简要使用笔记
任何编程语言都有自己的读写配置文件的方法和格式,Java也不例外. 在Java编程语言中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XM ...
- ConfigParser 读写配置文件
一.ini: 1..ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式 2.ini文件创建方法: (1)先建立一个记事本文件.(2 ...
- Python-通过configparser读写配置文件
Python读写配置文件: 1.创建配置文件(文件名以.conf或.ini结束的文件表示配置文件) 2.导入所需模块 OS, configparser >>> import os & ...
随机推荐
- C语言基础知识【常量】
C 常量1.常量是固定值,在程序执行期间不会改变.这些固定的值,又叫做字面量.常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量.常量就像是常规的变量,只不过 ...
- Http权威指南学习研究
学习时间: 该学习:第六章 6.6小节 加油 185页 2017年5月15日15:13:00 今天任务: 看完前两章节: ...
- 白昼夢 / Daydream(模拟)
C - 白昼夢 / Daydream Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You ...
- ubuntu问题: 同时只能有一个软件管理工具在运行
或者是: 只能同时运行一个更新管理器 打开终端输入命令:sudo dpkg –configure -a 运行,系统问题就解决了
- mybatis相关
1 namespace dao中使用namespace+id一起来完成对mapper中sql statement的调用. 2 关于resultMap和parameterType parameterTy ...
- 广告 竞价排名 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 ...
- Day 1 :成功完成注册
今天成功完成了cnblogs的注册,之后会在这里开业咯!记录下此刻时间
- MySQL登陆数据库
下面是几种登陆到MySql数据库的登陆方式代码 1mysql -u root -ppassword 2.mysql -u root -p Enter password:password3.mysql ...
- ElasticSearch(十七)初识倒排索引
现在有两条document: doc1:I really liked my small dogs, and I think my mom also liked them. doc2:He never ...
- Linux里的发消息
1.给指定用户发送消息 语法: write 用户名 说明: 1.用户是在线的 2.执行过程 a.敲完命令按回车,进入写信模式 b.写信的时候如果写错了Ctrl+退格 删除字符 c.写完以后Ctrl+D ...