用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;
}

【MFC学习二】CFileDialog导出文件的更多相关文章

  1. C++ MFC学习 (二)

    使用向导创建MFC程序 1. 新建-> 选择 MFC -> MFC应用程序 ->下一步 2. 应用程序类型选择     选择单个文档,MFC标准  -> 下一步   3. 下一 ...

  2. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

  3. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  4. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  5. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  6. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  7. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  8. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  9. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  10. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

随机推荐

  1. el-table在flex布局下宽度不能自适应的解决方法

    https://blog.csdn.net/Komorebi_00/article/details/127566867

  2. webpack4中hash、chunkhash和contenthash三者的区别

    https://blog.csdn.net/bubbling_coding/article/details/81561362

  3. CDC设计实例-02

    CDC设计实例 加速器 假设要处理一项业务比如图像处理,有两种方向,第一种选择一些通用的处理器CPU\GPU\DSP等通用的处理器,第二种是将算法映射成IP,直接使用IP进行处理图像处理等专门的业务就 ...

  4. ONVIF网络摄像头(IPC)客户端开发—最简RTSP客户端实现

    前言: 网上对于RTSP协议客户端的表述和实现非常不清晰,在实际使用中,FFMPEG和live555这些软件已经实现了RTSP客户端和服务端的所有功能,但是它们并没有将RTSP协议独立出来,通过看li ...

  5. [转帖]ntp导致的时钟回拨

    https://zhuanlan.zhihu.com/p/587313130 我们的服务器时间校准一般是通过ntp进程去校准的.但由于校准这个动作,会导致时钟跳跃变化的现象.而这种情况里面,往往回拨最 ...

  6. Chrony 的学习与使用

    Chrony 的学习与使用 背景 之前捯饬 ntp 发现很麻烦, 经常容易弄错了. 昨天处理文件精确时间时 想到了时间同步. 发现只有自己总结的ntpdate 但是还没有 chronyd相关的总结 本 ...

  7. [转帖]SQL Server数据库存储总结

    SQL Server数据库存储文件类型:数据文件和日志文件.数据文件以页面作为存储单元存储数据. 页面:即数据页面,数据页(Page).是系统在磁盘间中分配的一段大小为8k的连续空间. 文件头(Fil ...

  8. 疯狂GC的第二种处理方式-ChatGPT的学习之四

    疯狂GC的第二种处理方式-ChatGPT的学习之四 摘要 上一个脚本太复杂了. 而且要改启动脚本. 课间休息跟人扯淡聊起来 chatGPT 发现他的语法很有用 但是思路不太对. 不过突然根据文档里写的 ...

  9. [转帖]SHELL—— awk两个特殊模式(BEGIN 和 END)及awk高级应用(条件判断、循环)

    一.Awk 的两个特殊模式 BEGIN 和 END,BEGIN 被放置在没有读取任何数据之前,而 END 被放置在所有的数据读取完成以后执行 体现如下: BEGIN{}: 读入第一行文本之前执行的语句 ...

  10. 不同信创服务器Redis7.0.5性能表现总结

    不同信创服务器Redis7.0.5性能表现总结 背景以及基础约定 随着美帝2022.10收紧EAR规定的硬件出口规定 信创事业迎来了一波新的高潮. 最近不仅仅要求国产化的硬件. 更要求国产化的OS,以 ...