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();
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();