简介
simpleini是C++对ini格式数据的解析/生成库。我比较推荐,理由可看介绍https://github.com/brofield/simpleini,其中我比较看重以下几个优点:
- simpleini库仅由SimpleIni.h一个文件组成。
- simpleini库支持char和wchar_t字符编程。
- 可选支持多行的value和重复的key名称。
- 可选支持不区分大小写的section和key。
- 支持key/value可以没有对应的section。
- 支持section和key可以按照加载时的顺序获取。
- simpleini库加载或输出数据时,支持UTF-8字符集和MBCS(本地语言)字符集。
- simpleini库解析ini数据前,若使用wchar_t接口,自动将ini数据的字符集转换为当前字符集。
缺点:
- simpleini库加载ini格式数据前,不支持自动识别字符集,必须在加载数据前显式指明数据源的字符集。
- simpleini库加载和输出数据时,仅支持UTF-8和MBCS(本地语言)字符集,而其他字符集暂不支持。
注意事项
解析ini数据时,注意字符集的自动转换。如果当前使用char接口,则输入数据没有发生字符集转换,字符集保持不变(加载的数据是UTF-8/ MBCS字符集,则保存相应字符集的数据)。如果当前使用wchar_t接口,则输入数据的字符集(UTF-8/MBCS)自动转换为UTF-16/32字符集。
当使用wchar_t接口时,由于加载数据和输出数据时都会自动转换字符集,因此输出数据时,字符集被还原回来了,即输出数据的字符集始终与原始数据的字符集保持一致。
ini数据加载和输出
API
重点了解ini数据加载和输出,以及字符集自动转换。API的熟悉只需多用即可,simpleini的API也是类似DOM,因此也简单易用。
Demo
1 // 不区分大小写
2 CSimpleIni ini;
3 CSimpleIni::TNamesDepend sections;
4 ini.GetAllSections(sections);
5 sections.sort(typename CSimpleIni::Entry::LoadOrder()); // 按照加载时的顺序排序
6 for (const auto &it : sections)
7 {
8 const CSimpleIni::TKeyVal *pKeyVal = ini.GetSection(it.pItem);
9 if (nullptr != pKeyVal)
10 {
11 for (const auto& it : *pKeyVal)
12 {
13 cout << it.first.pItem << _T(" = ") << it.second << endl;
14 }
15 }
16 }