C++操作配置文件.ini

1.准备

  此次操作*.ini文件用到的工具:simpleini,下载地址:https://github.com/brofield/simpleini
文件:SimpleIni.h为操作*.ini的主文件,声明和实现都在.h文件中。
文件:ConvertUTF.h、ConvertUTF.c为编码格式转换文件。

2.配置

  直接拷贝SimpleIni.h文件到自己工程里即可使用,无需其他操作。
在这里插入图片描述

3.介绍

  *.ini配置文件是Windows系统配置文件所采用的存储格式,由 节、键 、值组成。示例如下:

	;注释
	[Section1]//节
	Key1=value//key1:键,value:值
	Key2=value
	... ...
	[Section2]
	Key1=value
	Key2=value
	... ...
	[server1]
	root = 10.1.1.1
	root = 10.1.1.2
	game = 10.1.1.3
	
	[server2]
	root = 10.1.1.1
	game = 10.1.1.3
	
	;误差倍数
	[ErrorRatio]
	;A文件配置
	ER1 = 5
	ER2 = 5
	ER3 = 5

4.(*.ini文件操作)

4.1 读取(*.ini)文件

//*读取(*.ini文件)
void test1(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	ini.SetMultiKey();//设置后支持一个键值有多个值
	//加载配置文件,将文件数据导入ini类中
	ini.LoadFile(path.c_str());
	//获取节为:server1,键为:root的值
	string res1 = ini.GetValue("server1", "root","def");
	//获取节为:server0,键为:root的值,如果节没有返回第三个参数"def"
	string res2 = ini.GetValue("server0", "root", "def");
	//获取节为:server1,键为:root1的值,如果键没有返回第三个参数"def"
	string res3 = ini.GetValue("server1", "root1", "def");
	//获取节为:server1,键为:root的值。hasMulti赋值为true,并返回第一个值
	//如果一个键值对应多个值,则hasMulti被赋值为true
	bool hasMulti;
	string res4 = ini.GetValue("server1", "root", "def",&hasMulti);
	cout << res1 << endl;
	cout << res2 << endl;
	cout << res3 << endl;
	cout << res4 << endl;
	cout << hasMulti << endl;
}

结果:
在这里插入图片描述

4.2 写入(*.ini)文件

//*写入(*.ini文件)
void test2(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	ini.SetValue("setVal", "key1", "value");
	//第二参数最好设置为false,不然保存的(*.ini)文件容易乱码
	ini.SaveFile("save.ini",false);
}

结果:
在这里插入图片描述

4.3 获取节和键

//获取所有节名和键名
void test3(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	//加载配置文件,将文件数据导入ini类中
	ini.LoadFile(path.c_str());
	//获取所有节名,存储在sections中(list结构)
	CSimpleIniA::TNamesDepend sections;
	ini.GetAllSections(sections);
	//获取节名为:ErrorRatio的所有键名,存储在keys中(list结构)
	CSimpleIniA::TNamesDepend keys;
	ini.GetAllKeys("ErrorRatio", keys);
	
	cout << "所有节名:" << endl;
	for (auto it = sections.begin(); it != sections.end(); it++)
	{
		cout << (*it).pItem << endl;
	}
	cout << "节名为:ErrorRatio的所有键名:" << endl;
	for (auto it = keys.begin(); it != keys.end(); it++)
	{
		cout << (*it).pItem << endl;
	}
}

输入数据:
在这里插入图片描述
结果:
在这里插入图片描述

4.4 添加和修改数据

//*添加和修改数据
void test4(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	ini.SetMultiKey();//设置后支持一个键值有多个值
	//加载配置文件,将文件数据导入ini类中
	ini.LoadFile(path.c_str());
	//*1.添加新的节
	ini.SetValue("newSection", nullptr, nullptr);
	//*1.添加新的节、键、值
	ini.SetValue("newSection1", "newKey1", "newValue1");
	ini.SaveFile("save2.ini", false);
}

输入数据:
在这里插入图片描述

结果:
在这里插入图片描述

4.5 删除数据

//*删除数据
void test5(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	ini.SetMultiKey();//设置后支持一个键值有多个值
	//加载配置文件,将文件数据导入ini类中
	ini.LoadFile(path.c_str());

	//*1.删除节
	ini.Delete("server1", nullptr);
	//*2.删除键、值
	ini.Delete("server2", "game");
	ini.SaveFile("save2.ini", false);
}

输入数据:
在这里插入图片描述

结果:
在这里插入图片描述

4.6 从字符串加载数据,并保存

//*从字符串加载数据,并保存
void test6()
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	string data = "[section]\nkey = value\nkey1=value1";
	ini.LoadData(data);
	cout << ini.GetValue("section", "key1", "def") << endl;

	ini.SaveFile("save7.ini", false);
}

结果:
在这里插入图片描述
在这里插入图片描述

4.7 其他

//*其他
void test7(string path)
{
	CSimpleIniA ini;
	//设置编码格式
	ini.SetUnicode();
	ini.SetMultiKey();//设置后支持一个键值有多个值
	//加载配置文件,将文件数据导入ini类中
	ini.LoadFile(path.c_str());

	cout << "节:server1是否存在:" << ini.SectionExists("server1") << endl;
	cout << "节:server1键的个数:" << ini.GetSectionSize("server1") << endl;
	cout <<"节为server1,键为game,是否存在" << ini.KeyExists("server1", "game") << endl;
	cout << "节为server1,键为g,是否存在" << ini.KeyExists("server1", "g") << endl;

	ini.SaveFile("save3.ini", false);
}

输入数据:
在这里插入图片描述

结果:
在这里插入图片描述

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

djh_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值