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