这两天刚好写一个小玩具需要用到读写配置文件,趁机学习了c++的boost 读写库
{
"SERVER_REG":"/tmp/wangyishen_register",
"SERVER_LOG":"/tmp/wangyishen_login",
"SERVER_CHAT":"/tmp/wangyishen_sendmsg",
"MAX_CONNECT_NUM":"2"
}
对于上面一个位于/etc/erverConfig结构简单的json文件,读取的方式如下
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
...
boost::property_tree::ptree root;//创建一个结构对象 boost::property_tree::read_json<boost::property_tree::ptree>("/etc/serverConfig",root);//读文件存放到root中
char SERVER_REG[BUF_LEN];//创建变量
memset(SERVER_REG , 0, sizeof(SERVER_REG));
memcpy(SERVER_REG , root.get<string>("SERVER_REG").data(), strlen(root.get<string>("SERVER_REG").data()) * sizeof(root.get<string>("SERVER_REG").data()));//读取内容并保存到变量中
如果希望写数据进某个字符串中 可以使用如下方法
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
//将 key:value写进字符串others中
bool json_add(char* others,char* key,char* value){
boost::property_tree::ptree root; //创建结构对象
std::stringstream s (others);
try {
read_json(s, root); //读取
}
catch(std::exception & e){
printf("cannot parse from string 'others' \n");
return false;
}
root.put(key,value); //将内容放入对象结构root中
write_json(s, root,false); //写回字符流对象
memset(others, 0 ,BUF_LEN* sizeof(char));
memcpy(others,s.str().data(), sizeof(char) * strlen(s.str().data())); //拷贝回去
return true;
}