引:读取配置文件是很常见的,尤其在后台服务器(linux、unix上)跑程序为了扩展性,都常用配置文件作为程序的输入来完成不同的工作内容。本文提供了简单的实现方法:
话不多说,看函数:
- /*
- *parameter: cfgfilepath 文件的绝对路径名如: /user/home/my.cfg
- * key 文本中的变量名
- * value 对应变量的值,用于保存
- *
- */
- #include <iostream>
- #include <string>
- #include <fstream>
- static bool readConfigFile(const char * cfgfilepath, const string & key, string & value)
- {
- fstream cfgFile;
- cfgFile.open(cfgfilepath);//打开文件
- if( ! cfgFile.is_open())
- {
- cout<<"can not open cfg file!"<<endl;
- return false;
- }
- char tmp[1000];
- while(!cfgFile.eof())//循环读取每一行
- {
- cfgFile.getline(tmp,1000);//每行读取前1000个字符,1000个应该足够了
- string line(tmp);
- size_t pos = line.find('=');//找到每行的“=”号位置,之前是key之后是value
- if(pos==string::npos) return false;
- string tmpKey = line.substr(0,pos);//取=号之前
- if(key==tmpKey)
- {
- value = line.substr(pos+1);//取=号之后
- return true;
- }
- }
- return false;
- }
/*
*parameter: cfgfilepath 文件的绝对路径名如: /user/home/my.cfg
* key 文本中的变量名
* value 对应变量的值,用于保存
*
*/
#include <iostream>
#include <string>
#include <fstream>
static bool readConfigFile(const char * cfgfilepath, const string & key, string & value)
{
fstream cfgFile;
cfgFile.open(cfgfilepath);//打开文件
if( ! cfgFile.is_open())
{
cout<<"can not open cfg file!"<<endl;
return false;
}
char tmp[1000];
while(!cfgFile.eof())//循环读取每一行
{
cfgFile.getline(tmp,1000);//每行读取前1000个字符,1000个应该足够了
string line(tmp);
size_t pos = line.find('=');//找到每行的“=”号位置,之前是key之后是value
if(pos==string::npos) return false;
string tmpKey = line.substr(0,pos);//取=号之前
if(key==tmpKey)
{
value = line.substr(pos+1);//取=号之后
return true;
}
}
return false;
}
这里要提的是,文本文件的变量内容应该是如下格式的
id=20
name=bob
address=beijing