全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++如何读取配置文件(ini/json)?(方法与示例)

C++读取配置文件推荐使用inih解析INI和nlohmann/json解析JSON:inih轻量无依赖,适合扁平配置;nlohmann/json支持嵌套与结构体映射,适合复杂跨语言场景。

读取配置文件在C++中很常见,但标准库不直接支持INI或JSON格式,需要借助第三方库或手动解析。下面介绍两种主流方式:用 inih 读INI,用 nlohmann/json 读JSON,都是轻量、头文件仅需、无依赖的推荐方案。

用 inih 读取 INI 文件

inih(INI Not Invented Here)是一个极简的C语言INI解析器,C++可直接使用,支持只读模式,无需编译,只需包含头文件。

步骤:

  • 下载 ini.hini.c(或仅用纯头文件版 ini.hpp,GitHub上有C++封装)
  • 将头文件加入工程,确保 INI_USE_STACK 宏未定义(避免栈溢出风险)
  • 实现回调函数,按节(section)、键(key)、值(value)逐行处理

示例(test.ini):

[database]
host = 127.0.0.1
port = 3306
timeout = 5

[log]
level = info
path = ./logs/app.log

C++代码(使用 inih 的 C++ 封装 ini.hpp):

#include "ini.hpp"
#include 
#include 

struct Config {
    std::string db_host = "localhost";
    int db_port = 3306;
    int db_timeout = 3;
    std::string log_level = "warn";
    std::string log_path = "./app.log";
};

Config load_ini(const std::string& filename) {
    Config cfg;
    INIReader reader(filename);
    if (reader.ParseError() != 0) {
        std::cerr << "Can't load " << filename << "\n";
        return cfg;
    }

    cfg.db_host     = reader.Get("database", "host", cfg.db_host);
    cfg.db_port     = reader.GetInteger("database", "port", cfg.db_port);
    cfg.db_timeout  = reader.GetInteger("database", "timeout", cfg.db_timeout);
    cfg.log_level   = reader.Get("log", "level", cfg.log_level);
    cfg.log_path    = reader.Get("log", "path", cfg.log_path);

    return cfg;
}

用 nlohmann/json 读取 JSON 文件

nlohmann/json 是目前最流行的C++ JSON库,头文件即用,语法直观,支持现代C++特性(如结构体映射)。

步骤:

  • 下载 json.hpp,放入项目目录(或用 vcpkg/conan 安装)
  • #include "json.hpp",使用 nlohmann::json 类型
  • json::parse()json::parse_file() 加载内容

示例(config.json):

{
  "database": {
    "host": "127.0.0.1",
    "port": 3306,
    "timeout": 5
  },
  "log": {
    "level": "info",
    "path": "./logs/app.log"
  }
}

C++代码(含结构体自动反序列化):

#include "json.hpp"
#include 
#include 
#include 

using json = nlohmann::json;

struct Config {
    struct Database { std::string host; int port; int timeout; };
    struct Log { std::string level; std::string path; };

    Database database;
    Log log;
};

void from_json(const json& j, Config::Database& d) {
    d.host = j.value("host", "localhost");
    d.port = j.value("port", 3306);
    d.timeout = j.value("timeout", 3);
}

void from_json(const json& j, Config::Log& l) {
    l.level = j.value("level", "warn");
    l.path = j.value("path", "./app.log");
}

void from_json(const json& j, Config& c) {
    c.database = j.at("database").get();
    c.log = j.at("log").get();
}

Config load_json(const std::string& filename) {
    std::ifstream f(filename);
    try {
        json j = json::parse(f);
        return j.get();
    } catch (const json::exception& e) {
        std::cerr << "JSON parse error: " << e.what() << "\n";
        return {};
    }
}

选择建议与注意事项

INI适合简单扁平配置(如桌面工具、嵌入式),人类易读写;JSON适合嵌套结构、跨语言协作(如服务端配置、API响应模拟)。

  • inih 不支持注释保留、写入或Unicode BOM,如需写配置请选 minIniSimpleIni
  • nlohmann/json 默认不校验字段缺失,用 j.at("key") 可抛异常,用 j.value("key", default) 更安全
  • 路径问题:确保配置文件路径正确,建议用相对路径 + 可执行文件所在目录拼接(可用 argv[0] 解析)
  • 生产环境建议加错误日志和默认兜底值,避免因配置缺失导致崩溃

基本上就这些。两个库都足够轻、文档全、社区稳,选一个上手快,配好一次就能复用多年。


# js  # git  # json  # github  # c语言  # app  # 回调函数  # 工具  #   # c++  # ios  # stream  # 配置文件  # 标准库  # 封装  # include  # 结构体  # default  # bom  # 头文件  # 都是  # 是一个  # 就能  # 两种  # 只需  # 推荐使用  # 上有  # 不支持 


相关文章: 阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站主机如何选?高性价比方案全解析  香港网站服务器数量如何影响SEO优化效果?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  测试制作网站有哪些,测试性取向的权威测试或者网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何通过cPanel快速搭建网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  建站之星如何助力企业快速打造五合一网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何基于PHP生成高效IDC网络公司建站源码?  如何选择高性价比服务器搭建个人网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何通过万网虚拟主机快速搭建网站?  IOS倒计时设置UIButton标题title的抖动问题  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  招商网站制作流程,网站招商广告语?  html制作网站的步骤有哪些,iapp如何添加网页?  如何在万网开始建站?分步指南解析  家庭建站与云服务器建站,如何选择更优?  Android滚轮选择时间控件使用详解  如何在阿里云虚拟主机上快速搭建个人网站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何在IIS中配置站点IP、端口及主机头?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  已有域名和空间,如何快速搭建网站?  建站主机选购指南:核心配置优化与品牌推荐方案  如何构建满足综合性能需求的优质建站方案?  如何实现建站之星域名转发设置?  手机网站制作与建设方案,手机网站如何建设?  实现虚拟支付需哪些建站技术支撑?  山东网站制作公司有哪些,山东大源集团官网?  网站制作软件有哪些,制图软件有哪些?  如何在腾讯云服务器快速搭建个人网站?  开封网站制作公司,网络用语开封是什么意思?  香港服务器部署网站为何提示未备案?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  建站之星如何快速生成多端适配网站?  建站之星ASP如何实现CMS高效搭建与安全管理?  建站之星如何防范黑客攻击与数据泄露?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何破解联通资金短缺导致的基站建设难题?  Android使用GridView实现日历的简单功能  独立制作一个网站多少钱,建立网站需要花多少钱?  建站之星伪静态规则如何正确配置?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何快速查询网址的建站时间与历史轨迹? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。