188上位机VC MFC利用INI文件保存读取各种参数数据
188上位机VC MFC利用INI文件保存读取各种参数数据 功能展示 INI文件的操作在前面例程有稍作介绍,INI是微软提供的方便快捷数据保存操作的文件类型,提供多种函数实现INI文件的操作,例程举例INI文件字符器,整形,结构体类型数据的操作,效果如图; 要点提示 对于INI文件字符串类型的保存与读取操作可以用函数WritePrivateProfileString()GetPrivateProfileString() WritePrivateProfileString()函数原型BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTRlpKeyName,LPCTSTR lpString,LPCTSTR lpFileName); 其中各参数的意义 LPCTSTR lpAppName 是INI文件中的一个字段名. LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名. LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的. LPCTSTR lpFileName 是完整的INI文件名,如果没有指定完整路径名,则会在windows目录(默认)查找文件。如果文件没有找到,则函数会在windows目录创建它。 GetPrivateProfileString()函数原型DWORD GetPrivateProfileString(lpszSection, lpszKey,lpszDefault,lpReturnedString, cchReturnBuffer, lpszFile) 参数表编辑 参数 类型及说明 lpApplicationName String,欲在其中查找条目的小节名称。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载这个ini文件所有小节的列表。 lpKeyName String,欲获取的项名或条目名。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载指定小节所有项的列表 lpDefault String,指定的条目没有找到时返回的默认值。可设为空("") lpReturnedString String,指定一个字串缓冲区,长度至少为nSize nSize Long,指定装载到lpReturnedString缓冲区的最大字符数量 lpFileName String,初始化文件的名字。如没有指定一个完整路径名,windows就在Windows目录中查找文件 整数,浮点数可以通过转换后再像字符串一样操作; 结构体的操作可以用函数WritePrivateProfileStruct(),GetPrivateProfileStruct() 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1,及按钮<选择INI文件目录>用于INI文件的路径选择; 手提一编辑框ID为IDC_EDIT2,及按钮<保存字符串到INI文件><从INI文件读字符串>用于对INI文件进行字符串的读写操作; 拖拽一编辑框ID为IDC_EDIT3,及按钮<保存整数到INI文件><从INI文件读整数>用于对INI文件进行整数的读写操作; 拖拽三编辑框ID分别 为IDC_EDIT4,IDC_EDIT5, IDC_EDIT6,及按钮<保存结构体到INI文件><从INI文件读结构体>实现对INI文件进行结构体的读写操作; 按钮代码分别 为 - void CGkbc8Dlg::OnChoose()//ini文件路径的选择
- {
- CHAR BUF[MAX_PATH];
- BROWSEINFO bi;
- ZeroMemory(&bi,sizeof(BROWSEINFO));
- bi.hwndOwner=this->m_hWnd;
- bi.lpszTitle="选择文件夹";
- bi.ulFlags=BIF_EDITBOX ;
- bi.pszDisplayName=BUF;
- LPITEMIDLIST lpitem=SHBrowseForFolder(&bi);
- if(lpitem==NULL) //如果没有选择路径则返回
- return ;
- SHGetPathFromIDList(lpitem,BUF);
- CString sINIFileName(BUF);
- sINIFileName+="\\工控编程吧.INI";
- SetDlgItemText(IDC_EDIT1,sINIFileName);
- }
复制代码- void CGkbc8Dlg::OnSection() //向INI文件写入字符串
- {
- CString sFilePath,sData;
- GetDlgItemText(IDC_EDIT1,sFilePath);
- GetDlgItemText(IDC_EDIT2,sData);
- WritePrivateProfileString("AppName","KeyName_STRING",sData,sFilePath);}
- void CGkbc8Dlg::OnReadstr() //从INI文件读字符串
- {
- CString sFilePath;
- CHAR ch[MAX_PATH];
- GetDlgItemText(IDC_EDIT1,sFilePath);
- GetPrivateProfileString("AppName","KeyName_STRING","",ch,MAX_PATH,sFilePath);
- SetDlgItemText(IDC_EDIT2,ch);}
- void CGkbc8Dlg::OnSaveini() //向INI文件写整数
- {
- CString sFilePath,sData;
- GetDlgItemText(IDC_EDIT1,sFilePath);
- int nData = GetDlgItemInt(IDC_EDIT3);
- sData.Format("%d",nData);
- WritePrivateProfileString("AppName","KeyName_INT",sData,sFilePath); }
- void CGkbc8Dlg::OnReadini() //从INI文件读整数
- {
- CString sFilePath;
- CHAR ch[MAX_PATH];
- GetDlgItemText(IDC_EDIT1,sFilePath);//INI文件路径获取
- GetPrivateProfileString("AppName","KeyName_INT","",ch,MAX_PATH,sFilePath);
- int nData = atoi(ch);
- SetDlgItemInt(IDC_EDIT3,nData); }
- void CGkbc8Dlg::OnSavestruct() //向INI文件写结构体数据
- {
- CString sFilePath;
- GetDlgItemText(IDC_EDIT1,sFilePath);//INI文件路径获取
- WEBSITE WebSite;
- ZeroMemory(&WebSite,sizeof(WEBSITE));
- WebSite.nIndex=GetDlgItemInt(IDC_EDIT4);
- GetDlgItemText(IDC_EDIT5,WebSite.SiteName,MAX_PATH);
- GetDlgItemText(IDC_EDIT6,WebSite.SiteAddr,MAX_PATH);//结构体赋值;
- WritePrivateProfileStruct("AppName","KeyName_STRUCT",&WebSite,sizeof(WebSite),sFilePath);}
复制代码- void CGkbc8Dlg::OnReadstruct()
- {
- CString sFilePath;
- GetDlgItemText(IDC_EDIT1,sFilePath);//INI文件路径获取
-
- WEBSITE WebSite;
- ZeroMemory(&WebSite,sizeof(WEBSITE));
-
- GetPrivateProfileStruct("AppName","KeyName_STRUCT",&WebSite,sizeof(WebSite),sFilePath);
- SetDlgItemInt(IDC_EDIT4,WebSite.nIndex);
- SetDlgItemText(IDC_EDIT5,WebSite.SiteName);
- SetDlgItemText(IDC_EDIT6,WebSite.SiteAddr);
- }
复制代码我们来演示整个功能实现过程
|