引用
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函数是不会创建文件,节名,键名的