配置文件
CConfig
代码如下(含详细注释):
- /*
- *CConfig.h
- */
- #include<iostream>
- #include<map>
- class CConfig
- {
- public:
- //配置文件的路径
- CConfig(std::string filename = "test.conf");
- ~CConfig(void);
- //初始化配置
- int InitConfig();
- //获取配置参数
- std::string getParam(std::string param);
- //设置配置参数
- std::string setParam();
- private:
- bool file_isok; //文件是否读取成功
- int ParamHandle(std::string strline); //处理每一行的参数
- public:
- std::map<std::string,std::string> paramstore; // 保存所有参数
- std::string filename; //文件名
- };
- /*
- * CConfig.cpp
- */
- #include "stdafx.h"
- #include "Config.h"
- #include<fstream>
- #include <string>
- #include<cstring>
- CConfig::CConfig(std::string filename):file_isok(false)
- {
- std::ifstream fp;
- fp.open(filename.c_str(),std::ios::in);
- if(fp.is_open()){ //验证文件是否可以打开,并进行标记
- file_isok = true;
- this->filename = filename;
- }
- }
- CConfig::~CConfig(void)
- {
- }
- std::string CConfig::getParam(std::string param){
- for(auto pa : paramstore){
- if(pa.first == param)
- return pa.second;
- }
- return "";
- }
- int CConfig::InitConfig(){
- if(!file_isok)return -1; //初始化失败
- std::ifstream fp;
- fp.open(filename.c_str(), std::ifstream::in);
- if(!fp){
- std::cerr << "文件读取出错" << std::endl;
- return -1;
- }
- char str[100];
- while(fp.getline(str,100)){ //读取每一行的配置文件
- unsigned int start, end;
- for(start = 0; start < strlen(str); start++){
- if(str[start] == ' '|| str[start] == '\r' || str[start] == '\n'){ //过滤空行
- start++;
- }else{
- break;
- }
- }
- for(end = strlen(str)-1; end > 0; end--){ //去掉末尾的空格和不可见字符
- if(str[end] == ' '|| str[end] == '\r' || str[end] == '\n'){
- end--;
- }else{
- break;
- }
- }
- if(start<end){
- std::string strs(str, start, end-start + 2);
- ParamHandle(strs);
- }
- }
- if(paramstore.size() == 0){
- std::cerr << "未读取到任何参数" << std::endl;
- return -1;
- }
- return 0;
- }
- int CConfig::ParamHandle(std::string strline){ //跳过#开头和'['开头的组标记
- if(strline.empty())return -1;
- int flageq = 0;
- for(int i = 0; i < strline.size(); i++){
- if(strline[0] =='#' || strline[0] == '[') return 0;
- if(strline[i] == '='){
- flageq = i;
- break;
- }
- }
- std::string key(strline, 0, flageq);
- std::string value(strline, flageq + 1, strline.size() - flageq);
- paramstore.insert(std::make_pair(key, value));
- }
责任编辑:武晓燕 来源: 畅游码海 网络库Ratel设计
(责任编辑:百科)
中盈盛达融资担保(01543.HK)完成发行2.60亿元公司债 票面利率为4.60%
好消息!全国首个百万千瓦煤电机组节能减排升级与改造示范项目建成投产
2019世界移动通信大会上5G手机频频亮相 智能手机巨大换机市场将开启