读写INI文件
为了方便地读写INI文件,系统提供了函数。下面分别进行介绍。
(1)WritePrivateProfileString
该函数用于向Ini文件中写入一个字符串数据。
语法:
BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString, LPCTSTR lpFileName);
参数说明:
lpAppName:表示节名。如果Ini文件中节名不存在,将创建一个节名。
lpKeyName:表示键名。如果该键名在所在的节中不存在,将创建一个键名。如果该参数为NULL,包括节及节下的所有项目都将被删除。
lpString:表示写入到键值中的数据。
lpFileName:表示INI文件的名称。
提示:WritePrivateProfileString函数不仅可以设置键名和键值,并且可以修改键名,如果第2个参数表示的键名不存在,将在INI文件中创建一个新的键名。
(2)GetPrivateProfileString
该函数用于获取INI文件中的字符串数据。
语法:
DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);
参数说明:
lpAppName:表示节名。如果该参数为NULL,函数将复制所有的节名到所标识的缓冲区中。
lpKeyName:表示键名。如果该参数为NULL,函数将lpAppName节下所有的键名复制到lpReturnedString缓冲区中。
lpDefault:表示默认值。
lpReturnedString:表示用于接收数据的缓冲区。
nSize:以字符为单位表示lpReturnedString缓冲区的大小。
lpFileName:表示文件名称。
(3)GetPrivateProfileInt
该方法用于从Ini文件中获取整型数据。
语法:
UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);
参数说明:
lpAppName:表示节名。如果该参数为NULL,函数将复制所有的节名到所标识的缓冲区中。
lpKeyName:表示键名。如果该参数为NULL,函数将lpAppName节下所有的键名复制到lpReturnedString缓冲区中。
nDefault:表示默认值。
lpReturnedString:表示用于接收数据的缓冲区。
返回值:函数返回实际读取的整数值。
(4)GetPrivateProfileSectionNames
该函数用于返回INI文件中的所有节名。
语法:
DWORD GetPrivateProfileSectionNames(LPTSTR lpszReturnBuffer,DWORD nSize,LPCTSTR lpFileName);
参数说明:
lpszReturnBuffer:表示接收节名的数据缓冲区。
nSize:表示缓冲区的大小。
lpFileName:表示INI文件名称。
(5)GetPrivateProfileSection
该函数返回指定节下所有的键名和键值。
语法:
DWORD GetPrivateProfileSection(LPCTSTR lpAppName,LPTSTR lpReturnedString,DWORD nSize, LPCTSTR lpFileName);
参数说明:
lpAppName:表示节名。
lpReturnedString:表示接收数据的缓冲区。
nSize:表示缓冲区的大小。
lpFileName:表示INI文件名称。
下面以一个示例介绍如何读写Ini文件。
例如,读写Ini文件
(1)创建一个基于对话框的工程,工程名称为“OperateIniFile”,设计对话框资源如图1所示。
.jpg)
图1 对话框资源设计窗口
(2)处理“确定”按钮的单击事件,向INI文件中写入数据。
void COperateIniFileDlg::OnOK()
{
CString section,keyOne,keyTwo,keyThree,
valOne,valTwo,valThree; //定义字符串变量
m_Section.GetWindowText(section); //获取节名
m_KeyOne.GetWindowText(keyOne); //获取键名
m_KeyTwo.GetWindowText(keyTwo); //获取键名
m_KeyThree.GetWindowText(keyThree); //获取键名
m_ValOne.GetWindowText(valOne); //获取键值
m_ValTwo.GetWindowText(valTwo); //获取键值
m_ValThree.GetWindowText(valThree); //获取键值
WritePrivateProfileString(section,keyOne,valOne,"c:\setting.ini"); //写入键名和键值
WritePrivateProfileString(section,keyTwo,valTwo,"c:\setting.ini"); //写入键名和键值
WritePrivateProfileString(section,keyThree,valThree,"c:\setting.ini"); //写入键名和键值
}
(3)处理“读取”按钮的单击事件。从INI文件中读取数据。
void COperateIniFileDlg::OnRead()
{
CString section; //定义字符串变量
GetPrivateProfileSectionNames(section.GetBuffer(0),100,"c:\setting.ini"); //获取节名
char keys[MAX_PATH]= {0}; //定义一个字符数组
GetPrivateProfileSection(section,keys,MAX_PATH,"c:\setting.ini"); //获取键名和键值
char *cmp = "="; //定义一个字符指针
int pos = strcspn(keys,cmp); //查找=在字符串中的位置
char vals[MAX_PATH] = {0}; //定义字符数组
strncpy(vals,keys,pos); //赋值键名
char* ptmp = keys+pos+1; //将字符指针指向键值
m_Section.SetWindowText(section); //设置编辑框节名文本
m_KeyOne.SetWindowText(vals); //设置编辑框键名文本
m_ValOne.SetWindowText(ptmp); //设置编辑框键值文本
int len = strlen(ptmp); //获取字符串长度
ptmp +=len+1; //指向下一个键名
pos = strcspn(ptmp,cmp); //查找=在字符串中的位置
memset(vals,0,MAX_PATH); //初始化vals
strncpy(vals,ptmp,pos); //赋值键名
m_KeyTwo.SetWindowText(vals); //设置键名文本
ptmp +=pos+1; //指向键值
m_ValTwo.SetWindowText(ptmp); //设置键值编辑框文本
len = strlen(ptmp); //获取字符串长度
ptmp +=len+1; //指向下一个键名
pos = strcspn(ptmp,cmp); //查找=在字符串中的位置
memset(vals,0,MAX_PATH); //初始化vals
strncpy(vals,ptmp,pos); //赋值键名
ptmp += pos+1; //指向键值
m_KeyThree.SetWindowText(vals); //设置编辑框键名文本
m_ValThree.SetWindowText(ptmp); //设置编辑框键值文本
}
(4)运行程序,效果如图2所示。
.jpg)
图2 操作INI文件