注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjc的博客

技术积累

 
 
 

日志

 
 

c++读取配置文件类  

2010-07-15 10:30:56|  分类: c/c++语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
configfile.cpp
/*
 * read cfg file
 *
 */
#include "ConfigFile.h"
#include <fstream>

namespace std {
    typedef std::basic_ifstream<char, char_traits<char> > tifstream;
};

ConfigFile::ConfigFile(std::string const& configFile) {
    std::tifstream file(configFile.c_str());
        std::string line;
        std::string name;
        std::string value;
        std::string inSection;
        size_t posEqual;
    while (std::getline(file,line)) {
                if ( !line.length()) continue;
                if ( line[0] == '#') continue;
                if ( line[0] == ';') continue;

                if ( line[0] == '[') {
                        inSection=line.substr(1,line.find(']')-1);
                        continue;
                }

                posEqual=line.find('=');
                name = line.substr(0,posEqual);
                value = line.substr(posEqual+1);
                size_t index = value.find('\r');
                if(index != -1)
                        value = value.substr(0, index);
                index = value.find('\n');
                if(index != -1)
                        value = value.substr(0, index);
                content_[inSection + '/' + name]=value;
        }
        file_not_found_ = (content_.empty());
}


std::string ConfigFile::Value(std::string const& section, std::string const& entry) {
        string_not_found_ = false;
        std::map<std::string, std::string>::const_iterator ci = content_.find(section + '/' + entry);
        if (ci == content_.end()) {
                string_not_found_ = true;
                return ""; // does not exist
    }
        return ci->second;
}

configfile.h
/*
 * cfg file read 
 *
 */

//#pragma once
#ifndef __CONFIGFILE_H_
#define __CONFIGFILE_H_

#include <string>
#include <map>
#include "include/common.h"


class ConfigFile  
{
    std::map<std::string, std::string> content_;
public:
        ConfigFile(std::string const& configFile);

        std::string Value(std::string const& section, std::string const& entry);

        bool file_not_found_;

        bool string_not_found_;
};


#endif
example.cpp
bool MySqlDb::OpenDataBase()
{
    //read config
     std::string config_file = "db.cfg";

     ConfigFile config(config_file);
     if(config.file_not_found_)
     {
          printf("config file %s is not found.\n", config_file.c_str());
          return  false;
     }

    std::string dbIP  = config.Value("","ServerIP");
    std::string user = config.Value("", "DataUser");
    std::string upwd = config.Value("", "DataPwd");
    std::string db   = config.Value("", "DataBase");

   m_Conn = mysql_init(NULL);
   assert(m_Conn);

   MYSQL* ret = mysql_real_connect(m_Conn,
                                   dbIP.c_str(),//"192.168.0.250",//   server.c_str(), // hostname
                                   user.c_str(),//"root",//user
                                   upwd.c_str(),//"123456",//password
                                   db.c_str(),// "repro",//DB
                                   0,//port
                                   NULL,//opt
                                   0 /*flags*/ );
   if ( ret == NULL )
   {
      printf(  "MySQL connect failed: " );
      mysql_close(m_Conn);

      m_bConnected = false;
      //  throw; /* !cj! TODO fix up */

   }else
   {
      m_bConnected = true;
   }

   return m_bConnected;
}
  评论这张
 
阅读(2665)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017