C++读写INI文件

引用

https://www.cnblogs.com/htj10/p/11741895.html
https://www.cnblogs.com/oddcat/p/11194082.html
https://www.cnblogs.com/my-blog/archive/2008/11/14/1333470.html

INI文件简介

INI是英文单词 INItialization 的缩写,常作为Windows系统下的配置文件。INI文件是文本文件,通常用于程序启动时初始化系统配置。
INI文件由节组成,每个节由键和键值组成如下:
[section1]
sec1_key1=sec1_val1
sec1_key2=sec1_val2

[section2]
sec2_key1=sec2_val1
sec2_key2=sec2_val2


[sectionN]
secN_key1=secN_val1
secN_key2=secN_val2

其中section是节,每个节中有对应的键和值,不同节中的键名可以重复,相同节中不能重复。
每一个键值对占一行,以英文分号’;'开头至行尾的部分被认为是注释内容

INI文件写入

WritePrivateProfileString 把给定的键名及其值写入到指定INI文件的相应块中。
WritePrivateProfileSection 替换INI文件中指定块中所有键名对应的值。
WritePrivateProfileStruct 把指定的键名及其数据写入到指定INI文件的块中。

WritePrivateProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
LPCTSTR lpString // 要写的字符串地址
LPCTSTR lpFileName // ini 文件的文件名
);

WritePrivateProfileString( "section1","sec1_key1","new value", "D:\\1.ini");
WritePrivateProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpString // 要写入的数据的地址
LPCTSTR lpFileName // ini 文件的文件名
);
WritePrivateProfileString( "section1","sec1_key1=new value1\r\nsec1_key2\r\nnew value2", "D:\\1.ini");
BOOL WritePrivateProfileStruct(
    LPCTSTR lpszSection, // pointer to section name
    LPCTSTR lpszKey, // pointer to key name
    LPVOID lpStruct, // 要写入的数据缓冲区
    UINT uSizeStruct, // 缓冲区的大小
    LPCTSTR szFile // pointer to initialization filename
   );
//把一个结构体的内存当做键值写入文件,从这一点上来看,他可以把任何一个内存块写入ini文件**
	struct person
	{
		person()
		{
			eyes= 2;
			mouth =1;
			tall = 1.5;
		}
		int eyes;
		int mouth;
		double tall ;
	};
	person he;
	WritePrivateProfileStruct("SEC10","Per",&he,sizeof(person), "D:\\1.ini");
	person he1;
	GetPrivateProfileStruct("SEC10","per",&he1,sizeof(person), "D:\\1.ini");

文件中如下:
[SEC10]
Per=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0

注意:
1、文件路径要是绝对路径不能是相对路径,相对路径默认是C:\windows
2、不管是文件节名还是键名都遵循有就修改没有就创建的原则,且不区分大小写

INI文件读取

GetPrivateProfileSection 读取INI文件指定块中的所有键名及其对应值。
GetPrivateProfileSectionNames 读取一INI文件中所有的块名。

GetPrivateProfileInt 读取INI文件指定块中的键名对应的整数值。
GetPrivateProfileString 读取INI文件指定块中的键名对应的字符串。
GetPrivateProfileStruct 读取INI文件指定块中的键名对应的数据

GetPrivateProfileInt(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
INT nDefault // 如果 Key 值没有找到,则返回缺省的值是多少
LPCTSTR lpFileName // ini 文件的文件名
);

中间参数和返回值的定义和 GetProfileInt 是一样的。


GetPrivateProfileString - 从 ini 文件的某个 Section 取得一个 key 的字符串,它的原形是:

GetPrivateProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
LPCTSTR lpDefault, // 如果 Key 值没有找到,则返回缺省的字符串的地址
LPTSTR lpReturnedString, // 返回字符串的缓冲区地址
DWORD nSize // 缓冲区的长度
LPCTSTR lpFileName // ini 文件的文件名
);


GetPrivateProfileSection - 从 ini 文件中读出整个 Section 的内容,它的原形是:

GetPrivateProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPTSTR lpReturnedString, // 返回数据的缓冲区地址
DWORD nSize // 返回数据的缓冲区长度
LPCTSTR lpFileName // ini 文件的文件名
);

注意:
1、返回读取是有默认值
2、GetPrivateProfileInt 读取的int如果是负数,则返回0因为该函数返回一个UINT
3、不管是文件不存在,节名不存在或者键名不存在都返回默认值
4、读取Section时行之间会以\0(ACCII 0)作为分隔符,写入的时候是\r\n,所以在显示的时候会只显示\0之前的,看着好像只读了一行,使用索引就没有问题了
5、Get函数是不会创建文件,节名,键名的

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值