C++读写配置文件 config类

config类自我实现
 
 
#ifndef  CONFIG_H_
#define  CONFIG_H_
#include  <string>
#include  <fstream>
#define  COMMENT_CHAR '#'
#define  CONFIG_NAME "./ config/ config . txt"
/**
*/
class  Config
{
public :
Config ( const  std :: string   filename ) ;
Config ( const  Config &  c ) ;
~ Config ( ) ;
bool  ReadConfig ( const  std :: string &  key ,  char *&  keyvalue ) ;
bool  ReadConfig ( const  std :: string &  key ,  int &  keyvalue ) ;
bool  AnalyseLine ( const  std :: string  &  line ,  std :: string  &  key ,  std :: string  &  value ) ;
private :
///
     std :: string  m_filename ;
     std :: ifstream  m_infile ;
} ;
#endif
 
 
#include  "config.h"
#include  <iostream>
#include  <stdlib.h>
#include  <string.h>
using  namespace  std ;
bool  Config :: AnalyseLine ( const  string  &  line ,  string  &  key ,  string  &  value )
{   
     if  ( line . empty ( ))
         return  false ;   
     string :: size_type    pos  =  string :: npos ;
     if  (( pos  =  line . find ( COMMENT_CHAR ))  !=  string :: npos )  {
         if  ( 0  ==  pos )  {   // 
              return  false ;
         }
     }
    
     if  (( pos  =  line . find ( ':' ))  ==  string :: npos )
         return  false ;   // :
     if ( strstr ( line . data ( ) , key . data ( ))) {
         const  char  * p = strstr ( line . data ( ) , ":" ) ;
         if ( p ) {
              ++ p ;
              value = p ;
             
              }
    
     }
//  printf("key.data _ %s\n",key.data());
//  printf("value.data _ %s\n",value.data());
     return  true ;
}
Config  ::  Config ( const  string  filename )  :  m_filename ( filename )
{
     ///
     m_infile . open ( m_filename . c_str ( )) ;
}
Config  ::  Config ( const  Config &  c )  :  m_filename ( c . m_filename )
{
}
Config  ::  ~ Config ( )
{
     ///
     if ( m_infile )
     {
         m_infile . close ( ) ;
     }
}
bool  Config :: ReadConfig ( const  string &  key ,  char *&  keyvalue )
{
     if  ( ! m_infile )  {
         return  false ;
     }
     string  line ,  key_ , value ;
     key_  =  key ;
     while  ( getline ( m_infile ,  line ))  { ey_ ,  value ))  {
           if  ( AnalyseLine ( line ,  key_ ,  value ))  {
              keyvalue = ( char * ) malloc ( sizeof ( value . data ( ))) ;
              strcpy ( keyvalue ,  value . data ( )) ;
     printf ( "keyvalue =%s\n" , keyvalue ) ;
              return  true ;
         }
     }
     return  false ;
}
bool  Config :: ReadConfig ( const  string &  key ,  int  &  keyvalue )
{
     if  ( ! m_infile )  {
         return  false ;
     }
     string  line ,  key_ , value ;
     key_  =  key ;
     while  ( getline ( m_infile ,  line ))  {
         if  ( AnalyseLine ( line ,  key_ ,  value ))  {
              keyvalue  =  atoi ( value . data ( )) ;
//  printf("keyvalue =%d\n",keyvalue);
              return  true ;
         }
     }
     return  false ;
}
 
 
BIN  : =  test
CFLAGS  : =  - g   - Wall
CC  : =  g ++
SRCFILE  : =  $ ( wildcard  * . cpp )
OBJFILE  : =  $ ( patsubst  % . cpp , % . o , $ ( SRCFILE ))
$ ( BIN ) :  $ ( OBJFILE )
            $ ( CC )  $ ( CFLAGS )  - o  $ ( BIN )  $ ( OBJFILE ) 
% . o : % . cpp
         $ ( CC )  $ ( CFLAGS )   - c  $<  - o  $@
clean  :  
         rm  - rf  $ ( OBJFILE )  $ { BIN }
 
 
    Config configset(CONFIG_NAME);

    int iport = 554;
    int itimeout = 65;
    int imode=0;
    char* hostname;
    configset.ReadConfig("iport",iport);
    configset.ReadConfig("itimeout",itimeout);
    configset.ReadConfig("imode",imode);
    configset.ReadConfig("hostname",hostname);
    configset.~Config();
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值