织梦CMS - 轻松建站从此开始!

罗索

采用boost property_tree 快速的存取软件配置

落鹤生 发布于 2011-03-18 10:59 点击:次 
以前用过tinyxml,ini等进行配置文件的存取,总的来说感觉相对累,而boost::property_tree则可以很方便的来做这些事。
TAG:

以前用过tinyxml,ini等进行配置文件的存取,总的来说感觉相对累,而boost::property_tree则可以很方便的来做这些事。
#include "StdAfx.h"
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/multi_index/detail/bidir_node_iterator.hpp>
#include "Configure.h"
#include "../utils/Common.h"

CConfigure::CConfigure(void)
{
}

CConfigure::~CConfigure(void)
{
}



unsigned long CConfigure::save( const string szUser,const string szPswd,bool bAutoSync,const string szStartTime,const string szIntevel,int nSyncModel,const string szServer,std::set<std::string>& lDirs )
{
    unsigned long ulRes=0;
    using boost::property_tree::ptree;
    ptree pt;
    std::string filename;
    char path[255]={0};
    getPath(path);
    filename = path;
    filename += "\\";
    filename += FILENAME;

    pt.put(USER_NAME,szUser);


    pt.put(PASSWORD,szPswd);

    std::string sDirFlag;
    sDirFlag = SYNC_DIRS;
    sDirFlag += ".";
    sDirFlag += SYNC_DIR;
   

    std::set<std::string>::iterator it=lDirs.begin();
在此处要注意是xml中是<DIRS><DIR>a</DIR><DIR>b</DIR></DIRS>在这里用add,而不是put
    for (;it != lDirs.end();it++)
    {
        std::string name = *it;
       
        pt.add(sDirFlag,name);
    }
//以下的是想把xml.encoding配置为gbk,避免如果是utf-8,则要进行很多的码流转换
    boost::property_tree::xml_parser::xml_writer_settings<char>  ss(' ',0,"gbk");
   
   
    write_xml(filename, pt,std::locale(),ss);
    return ulRes;
}

unsigned long CConfigure::load( string& szUser, string& szPswd,bool& bAutoSync, string& szStartTime, string& szIntevel,int& nSyncModel, string& szServer,std::set<std::string>& lDirs )
{
    unsigned long ulRes=0;
    using boost::property_tree::ptree;
    ptree pt;
    std::string filename;
    char sTmp[255]={0};
    getPath(sTmp);
    filename = sTmp;
    filename += "\\";
    filename += FILENAME;
    CChineseCodeLib ccl;

    read_xml(filename, pt);
    try
    {
        szUser= pt.get(USER_NAME," ");
       
        szPswd= pt.get(PASSWORD,"");
       

       
    }
    catch(...)
    {
        ulRes = 2;
    }
    try
    {
        std::string sDirFlag;
        sDirFlag = SYNC_DIRS;
        /*sDirFlag += ".";
        sDirFlag += SYNC_DIR;*/
        ptree & p=pt.get_child(sDirFlag);
在此处要注意是xml中是<DIRS><DIR>a</DIR><DIR>b</DIR></DIRS>在这里用只要到DIRS就可以进行遍历了
        BOOST_FOREACH(const ptree::value_type &v,p )
        {
            string strTmp=v.second.data();
           
            lDirs.insert(strTmp);
        }
    }
    catch (...)
    {
        ulRes = 2;
    }
    return ulRes;
}
unsigned long CConfigure::file_exist()
{
    std::string filename;
    char path[255]={0};
    getPath(path);
    filename = path;
    filename += "\\";
    filename += FILENAME;
    namespace fs = boost::filesystem;
    fs::path pathFile(filename, fs::native);
    if (boost::filesystem::exists(pathFile))
    {
        return CONFIG_SUCCESS;
    }
    else
    {
        return CONFIG_FILE_NOT_EXIST;
    }
}

(李浩)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201103/11087.html]
本文出处:lihaoyxj.cublog.cn 作者:李浩
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容