当前位置:网站首页>配置文件的读取-TOML
配置文件的读取-TOML
2022-08-09 01:45:00 【大1234草】
前言
在C++的项目中,我们可以选择使用哪种配置文件?选择配置文件的两个依据可能是:
- 配置数据本身的复杂性。
- 应用程序的编程语言是否具有用于解析文件格式的现有强大库
具体可参考:Config Files: INI, XML, JSON, YAML, TOML
在C++中,Boost.PropertyTree是一个保存了多个属性值的树形数据结构, 它可以用类似路径的简单方式访问任意节点的属性,而且每个节点都可以用类似STL的风格遍历子节点。property_tree特别适用于应用程序的配置数据处理, 它可以解析XML、JSON、INI格式的文本数据,使用它能够减轻开发配置管理的工作。
但是XML、JSON、INI这三种格式,我都没选。INI比较简单,不够花里胡哨;JSON不能写注释;XML有些复杂。阅读Config Files: INI, XML, JSON, YAML, TOML后, 我选择toml-lang/toml作为配置文件格式。(INI可能是更好的选择。但好玩起见,尝试使用TOML)
TOML配置文件的使用
见官方文档。
TOML使用demo
下面代码来自:da1234cao/FreeFile
配置文件如下所示,包含字符串,数组,表。
# TOML中的单引号是文字常量,不允许转义
# handle.exe文件路径
handle = '.\handle.exe'
# 被进程占用的文件路径
freeFiles = ['D:\cmake', 'E:\tmp.txt']
# 运行过程中生成内容路径
tmpfile = '.\output.txt'
# 日志文件
[log]
path = '.\freeFile.log'
level = 'trace'
max_file_size = 1 # MB单位
max_files = 3
接口使用如下。
# toml
FetchContent_Declare(
tomlplusplus
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
GIT_TAG v3.1.0
GIT_SUBMODULES ""
)
FetchContent_MakeAvailable(tomlplusplus)
include_directories(${tomlplusplus_SOURCE_DIR}/include)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PRIVATE tomlplusplus::tomlplusplus)
try {
// 从配置文件中提取信息
toml::table tlbs;
optional<string> handle, tmpfile; // optional异常未捕获
set<string> free_files;
string log_file_path, logger_name, log_level;
size_t max_log_file_size, max_log_files;
try {
tlbs = toml::parse_file(R"(.\config.toml)");
handle = tlbs["handle"].value<string>();
tmpfile = tlbs["tmpfile"].value<string>();
const toml::array &freeFiles = *tlbs.get_as<toml::array>("freeFiles");
for (int i = 0; i < freeFiles.size(); i++) {
free_files.insert(freeFiles[i].value<string>().value());
}
log_file_path = tlbs["log"]["path"].value<string>().value();
log_level = tlbs["log"]["level"].value<string>().value();
max_log_file_size = tlbs["log"]["max_file_size"].value<int>().value();
max_log_files = tlbs["log"]["max_files"].value<int>().value();
} catch (const toml::parse_error& err) {
cerr << "Parsing failed:\n" << err << "\n";
return 1;
}
......
边栏推荐
猜你喜欢
随机推荐
OIDC 思维导图
入门数据库Days6
Latex example reference
Introduction to LVGL (based on v8.1-8.2)
When the centralized platform is gone, everything derived from this platform will be in vain
在 ASP.NET Core 中上传文件
软件测试的调用接口怎么调用,逻辑是什么?
mysql连接超过八小时报错
LeetCode精选200道--字符串篇
TP测试查询数据库字段为null或空的字段
椭圆曲线复习
[Signal denoising] Based on Sage-Husa adaptive Kalman filter to realize the suppression of ocean wave magnetic field noise and the generation of ocean wave magnetic field noise with matlab code
ONNX是什么?怎么用?[简明解读版]
走向合规化的虚拟人直播
深度学习模型的两种部署:ONNX与Caffe
33. 分别谈谈联合索引生效和失效的条件
ffplay playback control
typescript89-展示任务列表功能
RF调试过程中现象一
gstreamer 记录










