c++读写配置文件
时间:2019-10-22
本文章向大家介绍c++读写配置文件,主要包括c++读写配置文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 使用boost库
Boost
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。这里也用到了文件系统库,更具体的说明请移步社区链接。
社区链接
boost 官网:https://www.boost.org/
boost Filesystem:https://www.boost.org/doc/libs/1_70_0/libs/filesystem/doc/index.htm
安装Boost
个人电脑是ubuntu系统,命令安装即可,其他系统没试过。当然也可以下载安装包进行安装。
sudo apt-get install libboost-all-dev
读取配置文件
配置文件内容如下:
[System] reboot_cnt=3
读取配置代码如下:
#include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ptree.hpp> #include <iostream> int main(int argc, char* argv[]) { if (!boost::filesystem::exists("config.ini")) { std::cerr << "config.ini not exists." << std::endl; return -1; } boost::property_tree::ptree root_node, tag_system; boost::property_tree::ini_parser::read_ini("config.ini", root_node); tag_system = root_node.get_child("System"); if(tag_system.count("reboot_cnt") != 1) { std::cerr << "reboot_cnt node not exists." << std::endl; return -1; } int cnt = cnt = tag_system.get<int>("reboot_cnt"); std::cout << "reboot_cnt: " << cnt << std::endl; return 0; }
g++命令
g++ -o test test.cc -lboost_system -lboost_filesystem
修改配置文件
配置文件内容如下:
[System] reboot_cnt=3
修改配置代码如下:
#include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ptree.hpp> #include <iostream> int main(int argc, char* argv[]) { if (!boost::filesystem::exists("config.ini")) { std::cerr << "config.ini not exists." << std::endl; return -1; } boost::property_tree::ptree root_node; boost::property_tree::ini_parser::read_ini("config.ini", root_node); root_node.put<int>("System.reboot_cnt", 10); write_ini("config.ini", root_node); return 0; }
g++命令
g++ -o test test.cc -lboost_system -lboost_filesystem
修改后的配置文件内容如下:
[System] reboot_cnt=10
写文件的形式初始化配置文件
假设配置文件不存在,初始化代码如下:
#include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ptree.hpp> #include <iostream> int main(int argc, char* argv[]) { if (!boost::filesystem::exists("config.ini")) { boost::filesystem::ofstream ofstream("config.ini", std::ios_base::out); ofstream << "[System]"; ofstream << "\n"; ofstream << "reboot_cnt=5"; ofstream.close(); } }
g++命令
g++ -o test test.cc -lboost_system -lboost_filesystem
初始化后的配置文件内容如下:
[System] reboot_cnt=5
读取整个文件
配置文件内容如下:
[System] reboot_cnt=3
读取整个文件代码如下:
#include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ptree.hpp> #include <iostream> #define FILE_MAX_SIZE 1024 * 40 int main(int argc, char* argv[]) { if (!boost::filesystem::exists("config.ini")) { std::cerr << "config.ini not exists." << std::endl; return -1; } char* data = (char*)malloc(sizeof(char) * FILE_MAX_SIZE); boost::filesystem::ifstream ifstream("config.ini", std::ios_base::in); ifstream.read(data, FILE_MAX_SIZE); std::cout << "data: " << std::endl; std::cout << data << std::endl; free(data); ifstream.close(); }
g++命令
g++ -o test test.cc -lboost_system -lboost_filesystem
原文转载自:https://blog.csdn.net/u013736136/article/details/92843525
原文地址:https://www.cnblogs.com/chaofn/p/11718979.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 优化 Docker 镜像大小常见方法
- 第10期:选择合适的表空间
- 在 Kubernetes 上编排 MongoDB 集群
- k8s技术圈一周精选[第7期]
- TypeScript namespace 命名空间
- 从Pytorch 的ONNX到OpenVINO中IR中间层
- Linux CPU 性能优化指南
- 差分隐私(Differential Privacy)
- ubuntu changelog/source获取方法
- element ui 图片上传封装多张或单张
- Android:友盟分享升级问题总结
- vue+element实现分页的封装
- 一款基于 Python 语言的 Linux 资源监视器!
- 我讨厌这个绿油油的头像!我用opencv换一下背景
- 哈哈哈哈哈哈镜~