最近看程序,觉得配置文件挺有用的,所以花了一下午学习了一下,感觉收获还不小,现整理笔记如下:
INI文件(Initialization file ,又称为初始化文件)是用来保存应用程序设置和选项的一种特殊的ASCII文件,以“.ini”作
为文件扩展名,也被称做配置文件或概要文件(Profile)。
配置文件里的信息之所以能为系统和众多不同类型的应用程序读取并识别,是由于其内部对数据的存取采用了预先约定的“项-
值对(Entry-value pairs)”存储结构, 并对待存取的数据分门别类地进行存储。
下面是系统目录下Win.ini文件的部分内容:
[windows]
load=
run=
NullPort=None
[Desktop]
WallpaperStyle=2
Pattern=(无)
在此,配置文件将信息分为若干“节”,节标题放在方括号中,如“[Desktop]”就是Desktop节,在每一个节中包含了一些与之相关
的“项”,并通过等号对其进行赋值。一般形式如下:
[SECTION]
ENTRY=VALUE
在初始化文件中,VALUE值只能有两种数据类型:数值和字符串。Windows分别为这两种数据类型提供了两套API函数对初始化文
件进行数据读取,在写入初始化文件时则只支持对字符串的写入,数值等类型必须先进行数据类型的转换,然后才能写入到初始化文
件。
私有初始化文件主要用来保存同应用程序当前状态相关的一些信息,当程序退出后,这些信息由于已写入到初始化文件而得以保
留,当程序再次运行时,可以通过对此初始化文件各项数据的读取而得知此应用程序在上次运行期间的相关信息。
=====================================================
程序关键代码:
INI文件格式:
[PROFILE_OPR]
NAME=王旭宁
NO=91044
TIME=2009年6月15日 17:20:37
读取配置文件:
CString strTemp;
GetPrivateProfileString("PROFILE_OPR", "NAME", "SOMEONE",
strTemp.GetBuffer(1025), 1024, theApp.m_strStartPath+ "//ProfileOperation.ini");
strTemp.ReleaseBuffer();
m_strName = strTemp;
int no = GetPrivateProfileInt("PROFILE_OPR", "NO",-1,theApp.m_strStartPath+ "//ProfileOperation.ini");
strTemp.Format("%d",no);
m_strNo = strTemp;
GetPrivateProfileString("PROFILE_OPR", "TIME", "公元前200年",
strTemp.GetBuffer(1025), 1024, theApp.m_strStartPath+ "//ProfileOperation.ini");
strTemp.ReleaseBuffer();
m_strLastTime = strTemp;
写配置文件:
WritePrivateProfileString("PROFILE_OPR", "NAME",m_strName,
theApp.m_strStartPath+ "//ProfileOperation.ini");
WritePrivateProfileString("PROFILE_OPR", "NO",m_strNo,
theApp.m_strStartPath+ "//ProfileOperation.ini");
CString tem;
CTime tm;
tm = CTime::GetCurrentTime();//.Format("%m月%d日 %H:%M");
//AfxMessageBox(tem);
tem.Format("%d年%d月%d日 %d:%d:%d",tm.GetYear( ),tm.GetMonth( ),tm.GetDay(),tm.GetHour( ),tm.GetMinute( ) ,tm.GetSecond( ) );
WritePrivateProfileString("PROFILE_OPR", "TIME",tem,
theApp.m_strStartPath+ "//ProfileOperation.ini");
===========================================================
对私有初始化文件的数据存取是由GetPrivateProfileInt()、GetPrivateProfileString()和WritePrivateProfileString()等三个API函数来完成的。其函数说明如下:
UINT GetPrivateProfileInt(LPCTSTR lpAppName, // 节名地址
LPCTSTR lpKeyName, // 项名地址
INT nDefault, // 在项名没有找到时返回的缺省值
LPCTSTR lpFileName // 初始化文件名地址
);
DWORD GetPrivateProfileString(LPCTSTR lpAppName, // 节名地址
LPCTSTR lpKeyName, // 项名地址
LPCTSTR lpDefault, // 缺省字符串
LPTSTR lpReturnedString, // 存放字符串的缓冲区地址
DWORD nSize, // 缓冲区大小
LPCTSTR lpFileName // 初始化文件名地址
);
BOOL WritePrivateProfileString(LPCTSTR lpAppName, // 节名地址
LPCTSTR lpKeyName, // 项名地址
LPCTSTR lpString, // 要写入的字符串地址
LPCTSTR lpFileName // 初始化文件名地址
);