您好,我是昊天,国内某头部音频公司的C++主程,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。
本文思路来源于读者交流群,某位读者朋友出一系列的拿来即用的脚手架,如INI文件的封装解析、JSON文件的封装解析、日志模块等,
为满足有同样问题的朋友们的需求,自本文开始将会开启脚手架系列文章,本文作为第一篇——从跨平台、易用性强的INI文件存取来深入分析,如果想进一步交流可进入交流内群获得源码(群二维码见后面)。
INI文件(Initialization File)是一种简单的配置文件格式,广泛用于存储配置信息,尤其是在桌面应用程序和游戏中。它采用易于理解的文本格式,允许用户和程序设置各种参数,且通常不需要复杂的解析机制。INI文件通常分为多个节(Section),每个节包含多个键值对配置项。
书写格式格式如下:
;全局数据
company=xxx
[General]
appname = MyApplication
version = 1.0.0
# 这是另一个注释
[UserSettings]
username = johndoe
language = en
theme = dark
[Section]
表示,每个节下有多个key=value
形式的配置项。;
或#
开头,程序在解析时会跳过这些行。INI文件广泛应用于配置管理,例如:
其实不敢妄谈“脚手架”,但是为了能够靠近“脚手架”的效果,期望满足如下需求:
IniConfig.cmake
文件,只需要在主工程中添加如下代码即可:include("path/ini/IniConfig.cmake") # path为IniConfig.cmake文件所在路径
IniConfig
类,提供了如下接口load
函数:加载INI文件,解析节名、键值对,忽略注释行;get
函数:获取指定节名和键名对应的值;set
函数:设置指定节名和键名对应的值;save
函数:将修改后的配置项保存到INI文件中;使用该项目时,需要在主工程的CMakeLists.txt
文件中添加对应的.cmake
文件,主项目的CMakeLists.txt
文件如下:
cmake_minimum_required(VERSION 3.16)
project(19_iniconfig)
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/example/main.cpp)
# 需要在add_executable、add_library之后添加
# 引入ini配置文件,只需要这一句即可
include(${CMAKE_CURRENT_SOURCE_DIR}/ini/IniConfig.cmake)
主程序中使用IniConfig
类的示例代码如下:
#include <iostream>
#include "IniConfig.h"
void test_ini_save()
{
INI::IniConfig config;
config.set("UserSettings", "username", "newuser");
config.set("UserSettings", "password", "newpassword");
config.set("Database", "host", "newhost");
config.set("Database", "port", "3306");
config.set("", "global", "global");
config.save("d://config.ini");
}
void test_ini_load()
{
INI::IniConfig config;
if (!config.load("d://config.ini"))
{
std::cout << "load failed" << std::endl;
}
std::string user_name, password, host, port, global, data;
if (config.get("UserSettings", "username", user_name))
{
std::cout << user_name << std::endl;
}
if (config.get("Database", "host", host))
{
std::cout << host << std::endl;
}
if (config.get("", "global", global))
{
std::cout << global << std::endl;
}
}
int main()
{
test_ini_save();
std::cout << "----------------------------" << std::endl;
test_ini_load();
return0;
}
本文介绍了一个跨平台、易用性高的INI文件封装解析的脚手架项目,如果希望获取源码或者跟我深入讨论这个问题。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有