Never save something for a special occasion. Every day in your life is a special occasion.
分类: 项目管理
2010-08-08 11:13:50
程序设计中,经常需要把一些数据先期导入到程序中进行初始化。如果你可以把数据写入ini文件,由程序去读ini文件中的数据进行初始化。
一. INI简介
那么什么是ini文件呢?ini文件是Initialization file的缩写,意即初始化文件。
其实windows操作系统也有自己的ini文件--如win.ini,保存在%WinDir%\system32目录下。Windows通过该文件对当前操作系统进行配置。
ini文件里的数据的存取是采取的是预先约定好的 “项-值”存储结构,各种数据被分门别类的存储。
形式:
; comment
[Section]
Key=KeyValue
以下是win.ini 文件的部分内容
[Mail]
MAPI=1
CMC=1
CMCDLLNAME=mapi.dll
CMCDLLNAME32=mapi32.dll
MAPIX=1
MAPIXVER=1.0.0.1
OLEMessaging=1
二.操作ini文件的API
windows SDK提供有两组API对ini文件进行读写。
第一组(表2)
读 |
写 |
GetPrivateProfileInt GetPrivateProfileString |
WritePrivateProfileString |
第二组(表3)
读 |
写 |
GetProfileInt GetProfileString |
WriteProfileString WritePrivateProfileSection |
表2的函数一般用于用户的配置文件。
表3的函数则是用于系统配置文件,即win.ini进行操作的函数。
现只介绍常用的表2中的函数,表3中的函数类同。
先看函数的功能:
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。
三、类实现 (MFC)
|
|