博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
INI文件的操作
阅读量:4167 次
发布时间:2019-05-26

本文共 2736 字,大约阅读时间需要 9 分钟。

INI文件是WINDOWS的一种文件标准,以文本格式来存储信息 ,他一般用来保存应用程序的一写配置参数 。其中的数据组织格式为:

;注释

[Section1 Name]

KeyName1=value1

;注释

KeyName2=value2

...

[Section2 Name]

KeyName1=value1

KeyName2=value2

...

INI文件中可以存在多个小节(Section),每个小节的开始用包括在一对方括号中的小节名称指定,不同的小节不能重名,一个小节的内容从小节名称的下一行开始,直到下一个小节开始为止。用户程序可以按照自己的需求建立多个小节。

在每个小节中可以定义多个键(Key),每一个键由一个“键名=键值”格式的字符串组成,并独自占用一行。在同一个小节中不能存在同名的键,但是在不同的小节中可以存在同名的键。

如果需要在INI文件的某些地方加注释,可以将注释放在单独的一行中,行首以分号开始,注释行出现的地方并没有什么限制,既可以出现在文件的最前面,也可以出现在文件的任何一行中。

现在让我们来看看对于INI文件操作的API函数:

1、 键值的创建和删除

BOOL WritePrivateProfileString(

  LPCTSTR ,  // section name

  LPCTSTR ,  // key name

  LPCTSTR ,   // string to add

  LPCTSTR   // initialization file

);

当这些参数全部指定为字符串的时候,函数将在指定INI文件的指定小节中写入“键名=键值”格式的行;当指定的INI文件、文件中的小节和小节中的键名都已经存在的时候,函数用新键值替换原来的键值;当指定的INI文件存在而小节不存在的时候,函数自动创建小节并将键写入;如果连指定的INI文件也不存在的话,函数会自动创建文件。总之,程序不必考虑INI文件是否存在,小节是否存在或键值定义是否存在等情况,只要调用WritePrivateProfileString函数就可以保证配置信息被正确保存。

WritePrivateProfileString函数也可以用来删除键或者小节,当lpAppName和lpKeyName参数指定了小节名称和键名,而lpString参数指定为NULL的时候,函数将指定的键删除,可以将lpKeyName和lpString参数全部指定为NULL,而lpAppName参数指定小节名称,那么将会删除lpAppName参数指定的小节。

2、获取键值

用GetPrivateProfileString函数获取键值字符串,也可以使用GetPrivateProfileInt函数让Windows将键值字符串转换成数值后再返回,其函数原型为:

DWORD GetPrivateProfileString(

  LPCTSTR ,        // section name

  LPCTSTR ,        // key name

  LPCTSTR ,        // default string

  LPTSTR ,  // destination buffer

  DWORD ,              // size of destination buffer

  LPCTSTR         // initialization file name

);

函数的返回值是返回到缓冲区中的字符串长度

lpReturnedString参数指向一个缓冲区,函数在这里返回获取的键值字符串,缓冲区的长度用nSize参数指定,当缓冲区的长度太小以至于无法容纳返回的字符串时,字符串会被截止到nSize?1的长度后返回,余下的一个字节用来存放一个0字符用做结尾。lpDefault参数指向一个默认字符串,当指定的键无法找到的时候,函数将这个字符串拷贝到返回缓冲区中。

 

GetPrivateProfileString还有两种特殊用法:

1)当lpAppName参数指定为NULL的时候,函数在缓冲区中返回的是全部小节名称的列表,每个小节名以0结尾,全部的名称列表再以一个附加的0结束,返回到缓冲区中的数据格式如下所示:

    小节名称1,0,小节名称2,0,…,小节名称n,0,0

2)当lpAppName参数指定了小节名称,而lpKeyName参数指定为NULL的时候,函数在缓冲区中返回该小节的全部键名列表,每个键名以0结尾,全部列表后面再以一个附加的0结束,如下所示:

    键名1,0,键名2,0,…,键名n,0,0

因此可以用这两种方式来枚举INI文件中的节名以及各个节中的键名

 

3、管理小节

GetPrivateProfileSectionNames函数可以用来返回全部小节名称的列表:

GetPrivateProfileSection函数则可以用来返回整个小节的键定义,返回到缓冲区中的数据格式为:键名1=键值1,0,键名2=键值2,0,…,键名n=键值n,0,0

WritePrivateProfileSection函数则将“键名1=键值1,0,键名2=键值2,0,…,键名n=键值n,0,0”格式的小节数据一次性全部写入。

在前面介绍的这些INI文件函数中,当lpFileName参数指定的文件名字符串中不包括路径时,系统将认为文件位于Windows安装目录下,这样当函数创建INI文件的时候,就会把文件创建于Windows安装目录下。但是大部分情况下,希望INI文件位于程序的运行目录下,这样拷贝文件的时候可以连同INI文件一起拷贝,另外,在卸载或删除程序的时候可以避免在Windows目录中留下一个“垃圾”INI文件。

 

如果要操作的是Windows安装目录下的Win.ini文件而非其他INI文件时,那么既可以使用上面这些函数,也可以使用另一组专门用于操作Win.ini文件的函数

这组函数是:

  GetProfileString,lpAppName,lpKeyName,lpDefault,lpBuffer,nSize

   GetProfileInt,lpAppName,lpKeyName,nDefault

WriteProfileString,lpAppName,lpKeyName,lpString

 GetProfileSection,lpAppName,lpBuffer,nSize

WriteProfileSection,lpAppName,lpString

与操作通用INI文件的函数相比,这组函数的函数名中少了“Private”单词,参数中少了lpFileName参数(因为操作的INI文件名就是Win.ini,并不需要单独指定),所有其他参数的用法都是相同的。

转载:

你可能感兴趣的文章
临时关闭打开console办法
查看>>
printf()函数中\t,水平制表符,空格的个数,对齐打印
查看>>
结构体测试用例struct(指针用例)结构体里面含有指向自己的指针怎么用
查看>>
Linux中gmtime和localtime的区别(time_t格式转换为tm格式)
查看>>
如果函数传递的是结构体,小心在调用的参数中给指针重新赋值(拿tm结构体举例)
查看>>
extern用法
查看>>
extern"C"的使用
查看>>
使用nm命令获取linux的可执行文件里或动态库中的所有函数名称
查看>>
关于free命令 内存的详细介绍以及如何手动释放内存
查看>>
Linux使用free命令buff/cache过高
查看>>
如何定义结构体变量及如何使用
查看>>
c语言中 有无bool 这个变量
查看>>
SVN错误:cannot show diff because of inconsistent of newline in the file 的解决方法
查看>>
回调函数的使用总结(非常重要)
查看>>
头文件.H使用注意事项总结
查看>>
无论是static还是非static的局部变量,每个线程都是私有的,其他线程不会对其进行干扰。
查看>>
linux下守护进程启动一个新应用进程的区别system、open和execl (execl在Ubuntu和linux执行的区别)
查看>>
memcpy使用函数注意(如果格式不一样如:memcpy(&A[0],(char *)&B,4))
查看>>
一个结构体的双指针和一个结构体的数组指针使用例子(都可以)
查看>>
多个.C和.H文件的相互调用以及变量的跨文件使用
查看>>