用Visual C++操作INI文件

一.INI简介 那么什么是ini文件呢?

ini文件是Initialization file的缩写,意即初始化文件。(从名字就可以看出它的功能了吧)。不仅你自己的程序可以使用ini文件,其实windows操作系统也有自己的ini文件---win.ini,保存在%WinDir%/system32目录下。Windows通过该文件对当前操作系统进行配置。

 ini文件里的数据的存取是采取的是预先约定好的 “项-值”存储结构,各种数据被分门别类的存储。以下是win.ini 文件的部分内容。

 [Mail]

 MAPI=1

 CMC=1

 CMCDLLNAME=mapi.dll  

CMCDLLNAME32=mapi32.dll

MAPIX=1  

MAPIXVER=1.0.0.1  

OLEMessaging=1  

表1  

通过以上内容,我们可以看到,ini文件将各种数据分成很多以“[ ]”组成的节,而在每一个“节”中又包含了很多“项”,“项”后面紧跟着一个等号,等号后面则是该项的值。在该例中[Mail]就是一个“节”,MAPI是一个项,1则是MAPI的值。

所以,它的通用形式我们可以总结成:  

[Section]  

Key=KeyValue  

 二.操作ini文件的API windows SDK提供有两组API对ini文件进行读写。  

读                                                     写

GetPrivateProfileString

GetPrivateProfileInt                       WritePrivateProfileString

GetPrivateProfileSection                   WritePrivateProfileSection

GetPrivateProfileSectionNames 

GetPrivateProfileStruct                         WritePrivateProfileStruct

表2  

读                                               写

GetProfileString GetProfileInt                                   WriteProfileString

GetProfileSection                              WritePrivateProfileSection

表3  

对用户的配置文件来说,一般我们使用的是表2中的函数,这一点从函数中的“private”就可以看出它是针对私有的配置文件的函数(又是废话!)。而表3中的函数则是提供给针对系统配置文件,即win.ini进行操作的函数。现只准备介绍表2中的函数,这也是使用率最高的,表3中的函数操作和表2中的函数操作类同,故略。   

现在我们来看看这几个函数的功能:  

DWORD GetPrivateProfileString(  

LPCTSTR lpAppName, //节名,即Section  

LPCTSTR lpKeyName, //项名,即Key  

LPCTSTR lpDefault, //缺省返回字符串。如lpKeyName未找到,拷贝lpDefault到lpReturnedString  

LPTSTR lpReturnedString, //返回字符串的缓冲地址  

DWORD nSize, //缓冲大小  

LPCTSTR lpFileName //ini文件路径

 );  

功能:根据指定的Section和 Key得到KeyValue,存放在lpReturnedString中  

返回:返回拷贝到缓冲中的字符个数。不包括结束符   

UINT GetPrivateProfileInt(  

LPCTSTR lpAppName, //节名,即Section

LPCTSTR lpKeyName, //项名,即Key  

INT nDefault, //缺省返回整型值。如lpKeyName未找到,函数返回nDefault的值  

LPCTSTR lpFileName //ini文件路径  

);  

功能:根据指定的Section和 Key得到整型KeyValue

 返回:返回得到的整型KeyValue   

BOOL WritePrivateProfileString(  

LPCTSTR lpAppName, //节名,即Section

LPCTSTR lpKeyName, //项名,即Key

 LPCTSTR lpString, //要写入的字符串

 LPCTSTR lpFileName //ini文件路径

);  

功能:向指定的Section和 Key写入KeyValue。

如果lpString为NULL,则删除当前lpKeyName  

如果lpKeyName=lpString=NULL,则删除当前Section以及其下的所有Key  

如果Section或者Key不存在,则创建;存在则覆盖  

返回:写入成功。   

DWORD GetPrivateProfileSectionNames(

 LPTSTR lpszReturnBuffer, //存放所有Section的缓冲地址  

DWORD nSize, //缓冲大小  

LPCTSTR lpFileName //ini文件路径  

);  

功能:得到ini文件中所有Section名。  

返回:返回拷贝到缓冲中的字符个数。不包括结束符。

注意:返回的所有Section在缓冲中的存放格式为“Section1”,0,“Section2”,0。。。。  

若需要得到具体的每个Section,则需要进行字符串解析。在后面的IniFile类中的GetAllKeysAndValues函数中会看到解 析步骤。  

DWORD GetPrivateProfileSection(  

LPCTSTR lpAppName, //节名,即Section  

LPTSTR lpReturnedString, //存放指定Section下所有的Key和KeyValue的缓冲地址  

DWORD nSize, //缓冲大小  

LPCTSTR lpFileName //ini文件路径  

);  

功能:得到指定Section下所有的Key和KeyValue。  

返回:返回拷贝到缓冲中的字符个数。不包括结束符。  

注意:返回的“项-值对”在缓冲中的存放格式为“Key1=KeyValue1”,0,“Key2=KeyValue2”,0 。。。。  

若需要得到具体的Key和KeyValue,则需要进行字符串解析。在后面的IniFile类中的GetAllKeysAndValues函数中会看到解析步骤。  GetPrivateProfileStruct和WritePrivateProfileStruct用的较少,本文也未介绍,感兴趣的朋友可以自己看看MSDN,里面也有详细介绍。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值