ini配置文件&解析(C++)

ini解析学习文档

一.什么是Ini

ini文件是Initialization File的缩写,即初始化文件,通常存放的是一个程序的初始化信息,是Windows的系统配置文件所采用的存储格式,统管windows的各项配置。ini文件的后缀名不一定是.ini,也可以是.cfg.conf或者是.tx*


二.ini文件格式&语法规范

ini文件由若干个节(section)组成,每个section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的section中相应的Key的值,而这只要借助几个函数即可完成。

  • 参数(Parameter)ini文件包含的最基本元素是参数参数包含参数名(name)参数值(value),格式如下:

    name=value
    
  • 节(section):所有的参数都是以为单位结合在一起。名称独占一行,在节声明后的所有的参数都属于该没有结束标识符,一个section的开始就是上一个section的结束。格式如下:

    [section]
    
  • 注释(comments)注释用分号;表示,放在注释之前,;号后直到行尾均为注释。示例如下:

    ;i wish nothing but the best for you
    
  • 文件实例

    [owner]
    name=WU yanzu
    organization=The United Nations
    
    [UserConfig]
    OpenDownloadFileAtOnec=Y
    WindowStyle=DevExpress Dark Style
     
    [Language]
    Language=CHS
     
    [AutoUpdate]
    Version=2.10  ;last version:2.08
    

三.系统解析函数

#include <windows.h>
1. 向ini文件中写入信息
  1. 写入字符串(string)

将信息写入系统的win.ini文件

BOOL WriteProfileString(
	LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串
    LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
    LPCTSTR lpString   // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
)

例:

::WriteProfileString("owner","name","WU yanzu");

将信息写入自己创建的.ini文件

BOOL WritePrivateProfileString(
	LPCTSTR lpAppName,  // 节的名字,是一个以0结束的字符串
    LPCTSTR lpKeyName,  // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
    LPCTSTR lpString,   // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
    LPCTSTR lpFileName      // 要写入的文件的文件名。相对或绝对路径
)

例:

::WritePrivateProfileString("family","name","Liu dehua","D:\GAME\Steam\hhh.ini");
  1. 写入整数值(int):没有相关函数,可以通过WriteProfileString进行参数转换实现
2.从ini文件中读取信息
  1. 从系统文件win.ini中读取信息

读取字符串(string)

DWORD GetProfileString(
	LPCTSTR lpAppName,            // 节名
    LPCTSTR lpKeyName,            // 键名,读取该键的值
    LPCTSTR lpDefault,            // 若指定的键不存在,该值作为读取的默认值
    LPTSTR lpReturnedString,      // 一个指向缓冲区的指针,接收读取的字符串
    DWORD nSize                   // 指定lpReturnedString指向的缓冲区的大小
)

例:

CString str;
::GetProfileString("owner","name","WU yanzu",str.GetBuffer(20),20);

读取整数(int)

UINT GetProfileInt(
	LPCTSTR lpAppName,      // 节名
    LPCTSTR lpKeyName,      // 键名,读取该键的值
    INT nDefault            // 若指定的键名不存在,该值作为读取的默认值
)

例:

int num;
num=::GetProfileInt("record","Phonenumber",19952730031);
  1. 从自己创建的.ini文件中读取信息

读取字符串(string)

DWORD GetPrivateProfileString(
	LPCTSTR lpAppName,            // 节名
    LPCTSTR lpKeyName,            // 键名
    LPCTSTR lpDefault,            // 若指定的键不存在,该值作为读取的默认值
    LPTSTR lpReturnedString,      // 一个指向缓冲区的指针,接收读取的字符串
    DWORD nSize,                  // 指定lpReturnedString指向的缓冲区的大小
    LPCTSTR lpFileName            // 读取信息的文件名。相对路径/绝对路径。
)

例:

CString str;
::GetPrivateProfileString("owner","name","WU yanzu",str.GetBuffer(20),20,"D:\GAME\Steam\hhh.ini");

读取整数(int)

UINT GetPrivateProfileInt(
	LPCTSTR lpAppName,      // 节名
    LPCTSTR lpKeyName,      // 键名
    INT nDefault,           // 若指定的键名不存在,该值作为读取的默认值
    LPCTSTR lpFileName      // 读取信息的文件名。相对路径/绝对路径。
)

例:

int num;
num=::GetPrivateProfileInt("record","Phonenumber",19952730031,".//dd.ini");
  1. 读取.ini文件中所有Section:使用GetPrivateProfileSectionNames函数
DWORD GetPrivateProfileSectionNames(
	LPTSTR lpszReturnBuffer,      // 指向一个缓冲区,用来保存返回的所有节名
    DWORD nSize,                  // 参数lpszReturnBuffer的大小
    LPCTSTR lpFileName            // 文件名,相对路径/绝对路径
) //返回所有节名的字节个数(包含结束符'\0')
  1. 读取.ini文件中指定Section中的所有的key=value:使用GetPrivateProfileSection函数
DWORD GetPrivateProfileSection(
	LPCTSTR lpAppName,         // 节名
    LPTSTR lpReturnedString,   // 一个指向缓冲区的指针,接收读取的字符串
    DWORD nSize,                  // 指定lpReturnedString指向的缓冲区的大小
    LPCTSTR lpFileName            // 文件名,相对路径/绝对路径
) //返回所有节名的字节个数(包含结束符'\0')

四.系统解析函数读取规则

1. 从遇到的第一个'['开始读,直到遇到第一个']'立即结束读取返回节名
2. 节的'['和']'必须在同一行,即仅对单行读取
3. ';'号后面全部视为注释,节名后面的注释不读取,键值后面的注释会读取
4. 若键值为整形,则只读取键值中第一个非整形字符左侧的整形
5. 忽略'['到第一个字符之间的所有空格,忽略']'到前一个字符之间的所有空格
6. 字符之间的空格不会被忽略,第一个字符到最后一个字符之间的所有内容均视为节名
7. 节可以只有节名没有内容
  • 15
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: INIInitial Input)配置文件是一种常用的配置文件格式,用于存储和读取程序的配置信息。以下是读写INI配置文件的步骤: 1. 读取INI配置文件:首先,我们需要打开INI配置文件,并逐行读取文件内容。可以使用适当的函数或库来实现文件读取操作。在读取过程中,我们需要解析每一行内容,并提取所需的配置信息。 2. 解析INI配置文件:在解析每一行配置信息之前,我们还需要进行一些校验和处理。首先,我们需要忽略注释行(行首以分号 “;” 或井号 “#” 开头的行),然后我们需要忽略空行。接下来,我们可以使用适当的函数或算法来解析每一行的配置信息。一般来说,每一行配置信息的格式为“键=值”的形式,我们需要提取出键和对应的值。 3. 存储INI配置文件:如果需要修改INI配置文件或添加新的配置项,我们需要打开INI配置文件,并写入新的配置信息。首先,我们需要读取原有的配置信息,并将其保存到内存中。然后,我们可以使用合适的函数或库来修改配置信息或添加新的配置项。最后,我们将修改后的配置信息写入INI配置文件。 4. 错误处理:在读写INI配置文件的过程中,如果遇到错误,例如文件不存在、文件权限不足、文件格式错误等,我们需要进行适当的错误处理。可以根据实际情况输出错误信息或进行其他操作。 总结:读写INI配置文件是一种常见的配置文件操作方法,需要按照一定的步骤进行。通过逐行读取和解析配置文件内容,可以实现读取INI配置文件的功能。通过修改和添加配置信息,并将其写入配置文件,可以实现存储INI配置文件的功能。在进行读写操作时,还需要注意错误处理,以保证程序的稳定性和可靠性。 ### 回答2: INI配置文件是一种常见的配置文件格式,用于存储程序的配置信息。C语言提供了一些函数库用于读写INI文件,包括<Windows.h>头文件中的GetPrivateProfileString、GetPrivateProfileInt、WritePrivateProfileString等函数。 首先,要读取INI配置文件中的值,可以使用GetPrivateProfileString函数。该函数的参数包括INI文件的路径、节名和键名,同时可以传入一个缓冲区,函数将根据配置文件中的键值将对应的值复制到缓冲区中。 另外,如果配置文件中的值是整数类型的,可以使用GetPrivateProfileInt函数,该函数会直接返回键值对应的整数值。 如果需要写入INI配置文件,可以使用WritePrivateProfileString函数。该函数的参数包括INI文件的路径、节名、键名和值。调用该函数后,程序会将键值对按照指定的格式写入配置文件中。 在使用这些函数前,需要先加载Windows.h头文件。同时,在使用INI配置文件时,需要注意配置文件的路径是否正确,以及节名和键名是否正确。读取INI文件时,还要判断读取的值是否为空,以避免出现错误。 总结起来,C语言提供了一些函数用于读写INI配置文件,这些函数可以方便地读取和写入配置信息。通过合理的使用这些函数,可以更好地管理程序的配置,提升程序的可配置性和可维护性。 ### 回答3: INIInitialization)是一种常见的配置文件格式,用于存储应用程序的设置和参数。在C语言中,可以通过读写INI配置文件来实现配置文件的加载和保存。 在读取INI配置文件时,可以使用标准库函数fopen()来打开文件,然后通过fgets()函数逐行读取文件内容。读取到的每一行都可以通过字符串处理函数来分割成键值对。常用的字符串处理函数包括strtok()、strstr()和sscanf()等。使用时需要根据INI配置文件的具体格式和规范来进行相应的处理。 在写入INI配置文件时,可以使用标准库函数fopen()来创建或打开文件,然后使用fprintf()函数来向文件写入内容。需要注意的是,写入INI配置文件时需要按照一定的格式和规范来进行写入,以保证配置文件的正确性和可读性。 读写INI配置文件的步骤主要包括以下几个方面: 1. 打开INI配置文件:使用fopen()函数打开INI配置文件。 2. 读取INI配置文件内容:使用fgets()函数逐行读取配置文件内容,并使用字符串处理函数处理每一行的内容。 3. 解析INI配置文件内容:根据INI配置文件的格式和规范,将每一行的内容解析成键值对,并存储到相应的数据结构中。 4. 关闭INI配置文件:使用fclose()函数关闭INI配置文件,释放资源。 5. 根据需要进行数据操作:根据存储的键值对,进行相应的数据操作,如设置应用程序的参数、初始化等。 6. 写入INI配置文件:使用fprintf()函数向INI配置文件写入数据,按照INI配置文件的格式和规范进行写入。 总结:通过使用C语言提供的标准库函数,可以实现INI配置文件的读取和写入。读取时需要逐行读取并解析每一行的内容,写入时需要按照INI配置文件的格式进行写入。读写INI配置文件是一种常见的配置文件处理方式,具有简单、灵活的优点,适用于各种应用程序的配置管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

F_WORKS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值