【MFC学习一】BROWSEINFO选择路径导出文件
mfc中使用 BROWSEINFO,使用
bi.lpfn = BrowseCallbackProc;
回调指定默认当前程序所在目录,导出csv文件,注意处理文件内容中的逗号、单引号、数字字符串开头有0的情况。
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData) { switch(uMsg) { case BFFM_INITIALIZED: ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData); break; } return 0; } unsigned selDir( string &strDir,void *hwnd/* = NULL*/ ) { char szDir[MAX_PATH]; BROWSEINFO bi; bi.hwndOwner = (HWND)hwnd; bi.pidlRoot = NULL; bi.pszDisplayName = szDir; bi.lpszTitle = "选择导出位置:"; bi.iImage = 0; bi.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS; bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM)(LPCTSTR)strDir.c_str(); LPITEMIDLIST lp = SHBrowseForFolder(&bi); if (lp && SHGetPathFromIDList(lp,szDir)) { strDir = szDir; return IDOK; } return IDCANCEL; } //将数据项写入CSV文件 int PutCSVItemLine(FILE *file, CStringArray &sItemLine) { //准备行数据 CStringA sLineString; //循环取子项 for(INT_PTR nItem=0; nItem<sItemLine.GetSize(); nItem++) { //取子项 CStringA sItem(sItemLine.GetAt(nItem)); //查找是否包含引号或逗号 if(sItem.FindOneOf("\",\r\n") >= 0) { //单引号替换为双引号 sItem.Replace("\"", "\"\""); //首尾用引号包含 sItem.Insert(0, "\""); sItem += "\""; } //添加逗号分隔符 if(!sLineString.IsEmpty()) sLineString += ","; //追加数据 sLineString += sItem; } //行尾添加\r\n sLineString += "\r\n"; //写入文件 return (int) fwrite((LPCSTR)sLineString, 1, sLineString.GetLength(), file); } void DLG_FuncPwdList::OnBnClickedExport() { // TODO: 在此添加控件通知处理程序代码 TCHAR sDir[MAX_PATH]; GetCurrentDirectory(MAX_PATH, sDir); CString cDir; cDir.Format(_T("%s"),sDir); std::string strDir = cDir; if (IDOK == selDir(strDir,GetSafeHwnd())) { /*CString str; str.Format(_T("选择的目录为 %s"), strDir.c_str()); AfxMessageBox(str);*/ CString FileName; SYSTEMTIME t; GetLocalTime(&t); FileName.Format(_T("%s\\功能密码%d%d%d%d%d%d.csv"),strDir.c_str(),t.wYear,t.wMonth,t.wDay, t.wHour, t.wMinute, t.wSecond); FILE *f = NULL; if(_tfopen_s(&f, FileName, _T("wb")) == 0) { //标题 CStringArray sLine; sLine.Add(_T("序号")); sLine.Add(_T("功能名称")); sLine.Add(_T("密码")); PutCSVItemLine(f, sLine); for(int i=0;i<FuncPwdList.size();i++) { sLine.RemoveAll(); CString tmp; tmp.Format(_T("%d"),FuncPwdList[i].FuncId); sLine.Add(tmp); sLine.Add(FuncPwdList[i].FuncName); tmp.Format(_T("\t%s\t"),FuncPwdList[i].Pwd);//处理开头为0的数字字符串 sLine.Add(tmp); PutCSVItemLine(f, sLine); } fclose(f); } CString msg = "导出成功!文件路径:" + FileName; AfxMessageBox(msg); } return; }

浙公网安备 33010602011771号