173上位机VC MFC创建INI文件与保存参数
173上位机VC MFC创建INI文件与保存参数 功能展示 上位机程序的参数的保存可以说是必不可少的功能,参数的保存操作最简单的就是直接写入INI文件中,当前例程实现INI文件存在的判断,创建及参数写入功能,写入的参数为指定目录内的文件名称,效果如图; 要点提示 Ini文件的创建可以用函数CreateFile(); HANDLE CreateFile( LPCTSTR lpFileName, //pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTESlpSecurityAttributes,// pointer to security attributes DWORD dwCreationDisposition, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to file with attributes tocopy ); dwCreationDisposition参数可选值有CREATE_NEW 创建文件如果文件存在会出错CREATE_ALWAYS创建文件会改写前一文件 OPEN_EXISTING 文件必须存在,同设备提出要求OPEN_ALWAYS 文件不存在,创建之TRUNCATE_EXISTING 将现有文件缩短为堆长度 Ini文件的写入可以用函数WritePrivateProfileString(); Ini文件的读取可以用函数GetPrivateProfileString(); INI文件存在与与否的判断可以用函数_access(); 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1用于显示要操作的文件夹路径; 拖拽一按钮关联函数用于选择要操作的文件夹路径 ; 拖拽一按钮关联函数用于创建INI文件及保存数据; - void CGkbc8Dlg::OnOpen()
- {
- //><获取桌面路径
- LPITEMIDLIST pidl;
- LPMALLOC pShellMalloc;
- char szDir[MAX_PATH];
-
- if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
- {
- if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl)))
- {
- SHGetPathFromIDList(pidl, szDir);
- pShellMalloc->Free(pidl);
- }
- pShellMalloc->Release();
- }
- //><选择路径
- BROWSEINFO bi;
- bi.hwndOwner = this->GetSafeHwnd();
- bi.pidlRoot = NULL;
- bi.pszDisplayName = NULL;
复制代码- bi.lpszTitle = TEXT("请选择文件夹");
- bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
- bi.lpfn = BrowseCallBackFun;NULL; // //回调函数
- bi.lParam = (LPARAM)szDir;//= 0;//传给回调函数的参数,设置默认路径
- bi.iImage = 0;
-
- pidl = SHBrowseForFolder(&bi);
- if (pidl == NULL)
- return;
-
- if (SHGetPathFromIDList(pidl, szDir))
- {
- CString sDir(szDir);
- SetDlgItemText(IDC_EDIT1,sDir);
- }
- }
- void CGkbc8Dlg::OnSave()
- {
- CString sDir,sFileName;
- GetDlgItemText(IDC_EDIT1,sDir);
- if(sDir.IsEmpty()) return;
- //
- sFileName=sDir+"\\工控编程吧.ini";//保存用文件名
- if(_access(sFileName,0)==-1)//不存在就创建
- {
- HANDLE handle=CreateFile(sFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,
- NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if(handle!=NULL)
- CloseHandle(handle);
- else
- return;
- }
- //
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);
- pListBox->ResetContent();
- }
复制代码我们来演示下功能实现的整个过程
|