【MFC学习二】CFileDialog导出文件
用CFileDialog导出文件,用户可指定文件名后缀等,感觉操作上比上文的 BROWSEINFO 更加人性化。
//将数据项写入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: 在此添加控件通知处理程序代码 CString strFilter, defaultFileName, finalFileName; SYSTEMTIME t; GetLocalTime(&t); defaultFileName.Format(_T("功能密码%d%d%d%d%d%d"),t.wYear,t.wMonth,t.wDay, t.wHour, t.wMinute, t.wSecond); // strFilter = "Excel文件 (*.csv)|*.csv|文本文件 (*.txt)|*.txt||"; CFileDialog TmpDlg(FALSE, _T("csv"), defaultFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter.GetBuffer(), this); if (TmpDlg.DoModal() == IDOK) { //获取文件路径 finalFileName = TmpDlg.GetPathName(); CString fileExt = TmpDlg.GetFileExt(); //导出文件 FILE *f = NULL; if(_tfopen_s(&f, finalFileName, _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); if(fileExt.CompareNoCase(_T("csv")) == 0) { tmp.Format(_T("\t%s\t"),FuncPwdList[i].Pwd);//处理开头为0的数字字符串 } else { tmp.Format(_T("%s"),FuncPwdList[i].Pwd); } sLine.Add(tmp); PutCSVItemLine(f, sLine); } fclose(f); } CString msg = "导出成功!文件路径:" + finalFileName; AfxMessageBox(msg); return; } return; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!