simpleini
=========
![Test Results Linux](https://github.com/brofield/simpleini/actions/workflows/test.yml/badge.svg)
A cross-platform library that provides a simple API to read and write INI-style configuration files. It supports data files in ASCII, MBCS and Unicode. It is designed explicitly to be portable to any platform and has been tested on Windows, WinCE and Linux. Released as open-source and free using the MIT licence.
# Feature Summary
- MIT Licence allows free use in all software (including GPL and commercial)
- multi-platform (Windows 95 to Windows 10, Windows CE, Linux, Unix)
- loading and saving of INI-style configuration files
- configuration files can have any newline format on all platforms
- liberal acceptance of file format
* key/values with no section, keys with no value
* removal of whitespace around sections, keys and values
- support for multi-line values (values with embedded newline characters)
- optional support for multiple keys with the same name
- optional case-insensitive sections and keys (for ASCII characters only)
- saves files with sections and keys in the same order as they were loaded
- preserves comments on the file, section and keys where possible
- supports both char or wchar_t programming interfaces
- supports both MBCS (system locale) and UTF-8 file encodings
- system locale does not need to be UTF-8 on Linux/Unix to load UTF-8 file
- support for non-ASCII characters in section, keys, values and comments
- support for non-standard character types or file encodings via user-written converter classes
- support for adding/modifying values programmatically
- should compile with no warnings in most compilers
# Documentation
Full documentation of the interface is available in doxygen format.
# Examples
These snippets are included with the distribution in the automatic tests as ts-snippets.cpp.
### SIMPLE USAGE
```c++
// simple demonstration
CSimpleIniA ini;
ini.SetUnicode();
SI_Error rc = ini.LoadFile("example.ini");
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_OK);
const char* pv;
pv = ini.GetValue("section", "key", "default");
ASSERT_STREQ(pv, "value");
ini.SetValue("section", "key", "newvalue");
pv = ini.GetValue("section", "key", "default");
ASSERT_STREQ(pv, "newvalue");
```
### LOADING DATA
```c++
// load from a data file
CSimpleIniA ini;
SI_Error rc = ini.LoadFile("example.ini");
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_OK);
// load from a string
const std::string example = "[section]\nkey = value\n";
CSimpleIniA ini;
SI_Error rc = ini.LoadData(example);
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_OK);
```
### GETTING SECTIONS AND KEYS
```c++
// get all sections
CSimpleIniA::TNamesDepend sections;
ini.GetAllSections(sections);
// get all keys in a section
CSimpleIniA::TNamesDepend keys;
ini.GetAllKeys("section1", keys);
```
### GETTING VALUES
```c++
// get the value of a key that doesn't exist
const char* pv;
pv = ini.GetValue("section1", "key99");
ASSERT_EQ(pv, nullptr);
// get the value of a key that does exist
pv = ini.GetValue("section1", "key1");
ASSERT_STREQ(pv, "value1");
// get the value of a key which may have multiple
// values. If hasMultiple is true, then there are
// multiple values and just one value has been returned
bool hasMulti;
pv = ini.GetValue("section1", "key1", nullptr, &hasMulti);
ASSERT_STREQ(pv, "value1");
ASSERT_EQ(hasMulti, false);
pv = ini.GetValue("section1", "key2", nullptr, &hasMulti);
ASSERT_STREQ(pv, "value2.1");
ASSERT_EQ(hasMulti, true);
// get all values of a key with multiple values
CSimpleIniA::TNamesDepend values;
ini.GetAllValues("section1", "key2", values);
// sort the values into a known order, in this case we want
// the original load order
values.sort(CSimpleIniA::Entry::LoadOrder());
// output all of the items
CSimpleIniA::TNamesDepend::const_iterator it;
for (it = values.begin(); it != values.end(); ++it) {
printf("value = '%s'\n", it->pItem);
}
```
### MODIFYING DATA
```c++
// add a new section
rc = ini.SetValue("section1", nullptr, nullptr);
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_INSERTED);
// not an error to add one that already exists
rc = ini.SetValue("section1", nullptr, nullptr);
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_UPDATED);
// get the value of a key that doesn't exist
const char* pv;
pv = ini.GetValue("section2", "key1", "default-value");
ASSERT_STREQ(pv, "default-value");
// adding a key (the section will be added if needed)
rc = ini.SetValue("section2", "key1", "value1");
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_INSERTED);
// ensure it is set to expected value
pv = ini.GetValue("section2", "key1", nullptr);
ASSERT_STREQ(pv, "value1");
// change the value of a key
rc = ini.SetValue("section2", "key1", "value2");
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_UPDATED);
// ensure it is set to expected value
pv = ini.GetValue("section2", "key1", nullptr);
ASSERT_STREQ(pv, "value2");
```
### DELETING DATA
```c++
// deleting a key from a section. Optionally the entire
// section may be deleted if it is now empty.
bool done, deleteSectionIfEmpty = true;
done = ini.Delete("section1", "key1", deleteSectionIfEmpty);
ASSERT_EQ(done, true);
done = ini.Delete("section1", "key1");
ASSERT_EQ(done, false);
// deleting an entire section and all keys in it
done = ini.Delete("section2", nullptr);
ASSERT_EQ(done, true);
done = ini.Delete("section2", nullptr);
ASSERT_EQ(done, false);
```
### SAVING DATA
```c++
// save the data to a string
std::string data;
rc = ini.Save(data);
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_OK);
// save the data back to the file
rc = ini.SaveFile("example2.ini");
if (rc < 0) { /* handle error */ };
ASSERT_EQ(rc, SI_OK);
```
没有合适的资源?快使用搜索试试~ 我知道了~
simpleini-master-版本202308
共40个文件
cpp:10个
ini:7个
txt:3个
需积分: 0 2 下载量 195 浏览量
2023-08-21
17:43:49
上传
评论
收藏 77KB ZIP 举报
温馨提示
simpleini介绍 一个跨平台库,提供了一个简单的API来读取和写入ini风格的配置文件。它支持ASCII、MBCS和Unicode格式的数据文件。它被明确设计为可移植到任何平台,并已在Windows, WinCE和Linux上进行了测试。使用MIT许可证作为开源和免费发布. 功能概述 MIT许可允许在所有软件中免费使用(包括GPL和商业软件) 多平台(Windows 95到Windows 10、Windows CE、Linux、Unix) 加载和保存ini风格的配置文件 在所有平台上,配置文件可以使用任何换行格式 对文件格式的自由接受 没有section的键/值,没有值的键 删除部分、键和值周围的空白 支持多行值(嵌入换行字符的值) 可选支持同名的多个键 可选的不区分大小写的节和键(仅针对ASCII字符) 在文件加载时以相同的顺序保存部分和键 尽可能保留文件、节和键上的注释 同时支持char或wchar_t编程接口 同时支持MBCS(系统区域设置)和UTF-8文件
资源推荐
资源详情
资源评论
收起资源包目录
simpleini-master-版本202308.zip (40个子文件)
simpleini-master
LICENCE.txt 1KB
other
simpleini.doxy 54KB
package.cmd 713B
CMakeLists.txt 1008B
.github
workflows
test.yml 473B
codeql.yml 3KB
Makefile 400B
tests
ts-snippets.cpp 7KB
tests.vcxproj 7KB
packages.config 185B
ts-wchar.cpp 2KB
ts-utf8.cpp 2KB
ts-noconvert.cpp 2KB
example.ini 22B
Makefile 356B
ts-quotes.cpp 4KB
tests.vcxproj.filters 2KB
old
testsi-UTF8.ini 794B
testsi-EUCJP.ini 766B
testsi.cpp 9KB
test1.cpp 4KB
test1-input.ini 2KB
test1-expected.ini 2KB
test.cmd 643B
testsi-SJIS.ini 765B
pch.h 100B
tests.ini 172B
pch.cpp 103B
ts-bugfix.cpp 3KB
.gitignore 25B
ts-roundtrip.cpp 5KB
release.txt 174B
ConvertUTF.h 6KB
vcproj
SimpleIni.vcxproj.filters 510B
SimpleIni.vcxproj 7KB
SimpleIni.sln 2KB
ConvertUTF.c 19KB
.gitignore 6KB
README.md 6KB
SimpleIni.h 127KB
共 40 条
- 1
资源评论
ken2232
- 粉丝: 7415
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功