共用版
.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 != ' ' && 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;
}
//----------------------------------------------------------------------------
// 程序名称:
// 程序说明:
// 程序作者:
// 程序版本:
// 开始日期:
//----------------------------------------------------------------------------
#ifndef __CONFIGFILE_H__
#define __CONFIGFILE_H__
#include <fstream>;
#include <iostream>;
using namespace std;
#define MAX_LINE_LENGTH 300
//----------------------------------------------------------------------------
// 类说明:用于对配置文件进行操作,对于给定的节名和变量名,获得变量的值。
//----------------------------------------------------------------------------
class CConfigFile
{
//构造函数和析构函数
private:
protected:
public:
//属性
private:
protected:
public:
//服务
private:
protected:
public:
};
#endif //__CONFIGFILE_H__
cpp文件
#include "ConfigFile.h"
#include <string.h>;
//----------------------------------------------------------------------------
// 函数原型: CConfigFile::CConfigFile()
// 函数功能: CConfigFile 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CConfigFile::CConfigFile()
{
}
//----------------------------------------------------------------------------
// 函数原型: CConfigFile::CConfigFile(char *pConfigFileName)
// 函数功能: CConfigFile 构造函数
// 传入参数: char *pConfigFileName
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CConfigFile::CConfigFile(char *pConfigFileName)
{
}
//----------------------------------------------------------------------------
// 函数原型: CConfigFile::~CConfigFile()
// 函数功能: CConfigFile 析构函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CConfigFile::~CConfigFile()
{
}
//----------------------------------------------------------------------------
// 函数原型: short
// 函数功能: 打开指定的配置文件
// 传入参数: char *ConfigFileName
// 传出参数: 无
// 函数返回: 0
//
// 注意事项: 无
//----------------------------------------------------------------------------
short
{
}
//----------------------------------------------------------------------------
// 函数原型: void CConfigFile::Close()
// 函数功能: 关闭配置文件
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CConfigFile::Close()
{
}
//----------------------------------------------------------------------------
// 函数原型: short
// 函数功能: 从配置文件中读出指定的变量的值
// 传入参数: char *Session
//
//
// 传出参数: 无
// 函数返回: 0
//
// 注意事项: 无
//----------------------------------------------------------------------------
short
{
//
}
//----------------------------------------------------------------------------
// 函数原型: short CConfigFile::GetSession(char *pStr,char *SessionName)
// 函数功能: 从指定的字符串中查找一个节(在[]中的字符串)的名称
// 传入参数: char *pStr 指定的字符串
//
// 传出参数: 无
// 函数返回: 0
//
// 注意事项: 无
//----------------------------------------------------------------------------
short CConfigFile::GetSession(char *pStr,char *SessionName)
{
}
//----------------------------------------------------------------------------
// 函数原型: short CConfigFile::GetContent(char *pStr,char *ValueName,char *RetStr)
// 函数功能: 从指定的字符串中获得变量的值
// 传入参数: char *pStr
//
//
// 传出参数: 无
// 函数返回: IS_VALUE 读到变量的值
//
//
//
// 注意事项: 无
//----------------------------------------------------------------------------
short CConfigFile::GetContent(char *pStr,char *ValueName,char *RetStr)
{
//
//modified by luxd
//
// modified by luxd
}
原文地址:http://blog.sina.com.cn/s/blog_67a1496f0100imci.html