【MFC学习二】CFileDialog导出文件
用CFileDialog导出文件,用户可指定文件名后缀等,感觉操作上比上文的 BROWSEINFO 更加人性化。
//将数据项写入CSV文件 int PutCSVItemLine(FILE *file, CStringArray &sItemLine) { //准备行数据 CStringA sLineString; //循环取子项 for(INT_PTR nItem=0; 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 ) { 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; }