MFC中打开文件对话框:CFileDlg

CFileDialog

文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:

CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

参数意义如下:

bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。

lpszDefExt 指定默认的文件扩展名。

lpszFileName 指定默认的文件名。

dwFlags 指明一些特定风格。

lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:

"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

pParentWnd 为父窗口指针。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:

CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c: est est1.txt

CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt

CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt

CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1

POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

例如

{

CString FilePathName;

CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框

if(dlg.DoModal()==IDOK)

FilePathName=dlg.GetPathName();

}

相关信息:CFileDialog 用于取文件名的几个成员函数:

假如选择的文件是C:WINDOWSTEST.EXE

则:

(1)GetPathName();取文件名全称,包括完整路径。取回C:WINDOWSTEST.EXE

(2)GetFileTitle();取文件全名:TEST.EXE

(3)GetFileName();取回TEST

(4)GetFileExt();取扩展名EXE

***************************************************************************************************************************************************************

在使用的时候,用一个数组开辟一个大的空间,保存文件的路径,然后在其他地方使用CVLOADIMAGE来载入图片,但是也可以使用CFileDialog的一个成员变量中取出。使用中出现的问题有

1.在对话框的m_ofn的设置的时候

dlg.m_ofn.Flags=OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_ENABLEHOOK;//改变对话框的样式,注意的是最后一个OFN_ENABLEHOOK必须加上去

不然就会出错了

2.空间的开辟足够大以及初始化为空

在MFC中使用CFile类和CFileDialog可以很简单的载入和保存文件……

CFileDialog文件选择对话框的使用:
首先构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog::CFileDialog(
BOOL bOpenFileDialog, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框
LPCTSTR lpszDefExt = NULL, //默认的文件扩展名
LPCTSTR lpszFileName = NULL, //默认的文件名
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //设定风格
LPCTSTR lpszFilter = NULL, //列出可供选择的文件类型和相应的扩展名
CWnd* pParentWnd = NULL //父窗口句柄指针
);
 
LPCTSTR lpszFilter 参数格式如:"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc;*.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

下面是实现代码:
//打开文件
//创建文件名缓存(fileBuffer)和文件读取缓存(rBuffer)
//此处如果不把缓存置0,在后面的设定中就会出错,如果是动态申请的,请用memset或者for循环把数组清零
char fileBuffer[5010] = {0}, rBuffer[5010] = {0};
int rBSize;
//定义一个CFile类,用来处理文件
CFile in;
//定义一个CFileDialog类,用来显示标准的打开文件对话框
CFileDialog inDlg(FALSE, NULL, NULL, NULL, _T("自定义文件类型 (*.xxx)|*.xxx|所有文件 (*.*)|*.*||"), NULL);
inDlg.m_ofn.lpstrTitle = _T("打开自定义文件");
//设定一个文件名缓存,因为CFileDialog内置的文件名缓存长度只有200,但是很多时候,文件的路径远大于这个数,为了保险起见,所以要自己设定一个文件名缓存
inDlg.m_ofn.lpstrFile = fileBuffer;
//设定缓存长度
inDlg.m_ofn.nMaxFile = 5000;
//显示对话框,并处理按了确定按钮的事件
if(inDlg.DoModal() == IDOK) {
 //以只读方式打开文件
 if(in.Open(inDlg.GetPathName(), CFile::modeRead)) {
  //得到文件长度,从而确定读取缓存的大小
  rBSize = in.GetLength();
  //避免数组越界,当然在这里也可以动态申请缓存空间
  if(rBSize > 5000) rBSize = 5000;
  //读入数据
  n.Read(rBuffer, rBSize);
  //关闭文件
  in.Close();
  MessageBox("打开文件成功", "搞定了", MB_ICONEXCLAMATION | MB_OK);
 } else {
  MessageBox("打开文件失败", "失败了", MB_ICONSTOP | MB_OK);
 }
}

//保存文件
//创建文件名缓存(fileBuffer)和文件写入缓存(wBuffer)
//此处如果不把缓存置0,在后面的设定中就会出错,如果是动态申请的,请用memset或者for循环把数组清零
char fileBuffer[5010] = {0}, wBuffer[5010] = {0};
int wBSize;
CFile out;
CFileDialog outDlg(FALSE, NULL, NULL, NULL, _T("自定义文件类型 (*.xxx)|*.xxx|所有文件 (*.*)|*.*||"), NULL);
//设定保存对话框标题
outDlg.m_ofn.lpstrTitle = _T("保存自定义文件");
//使用自定义的文件名缓存
outDlg.m_ofn.lpstrFile = fileBuffer;
//设定保存文件的默认后缀,如果自己有输入后缀,则时候输入的后缀
outDlg.m_ofn.lpstrDefExt = "xxx";
//设定缓存大小
outDlg.m_ofn.nMaxFile = 5000;
//显示对话框
if(outDlg.DoModal() == IDOK) {
 //得到文件名,并用创建和写入方式打开
 if(out.Open(outDlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) {
  //在这里把你要写入文件的内容写入缓存,如果写入的内容过长,可以分次写入
  //得到写入当前缓存中内容的长度
  wBSize = strlen(wBuffer);
  //写入文件
  out.Write(wBuffer, wBSize);
  //关闭文件
  out.Close();
  MessageBox("保存文件成功", "搞定了", MB_ICONEXCLAMATION | MB_OK);
 } else {
  MessageBox("保存文件失败", "失败了", MB_ICONSTOP | MB_OK);
 }
}

MFC中打开文件对话框:CFileDlg相关推荐

  1. MFC程序打开文件对话框出错的问题解决

    前几天从网上下了个图像分析的mfc小程序,是VC6的 用VC6在本地编译生成都没问题.执行起来弹出一个未处理的错误,程序崩溃退出. 想起来原来遇到过打开文件对话框方面的问题,当时项目时间紧张未能深究. ...

  2. MFC中的文件对话框类CFileDialog详解

    目录 文件对话框的分类 文件对话框类CFileDialog 对话框选项常用属性(实例:dialog) 对话框常用方法 文件对话框实例 文件对话框的分类       文件对话框分为打开文件对话框和保存文 ...

  3. Qt中打开文件对话框和保存文件对话框

    主要是用QFileDialog的两个静态方法 1.打开对话框 QString getOpenFileName(QWidget * parent = 0, const QString & cap ...

  4. python打开-Python中的打开文件对话框(转)

    1.最早学习Tkinter的时候,在<Tkinter编程代码实例>中看到的"打开文件对话框"需要用到FileDialog模块,代码非常简单: from Tkinter ...

  5. MFC中的文件读写技术

    计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的. 面向存储的文件技术 什么是文件?计算机中, ...

  6. Cmap和Carray以及Cstring的使用以及MFC中的文件读写

    参考资料:百度文库http://wenku.baidu.com/view/ddd1b32558fb770bf78a55a5.html?from=search http://wenku.baidu.co ...

  7. vc 添加打开文件对话框并读取文件

    1.创建打开文件对话框:                                   CFileDialog dlg(TRUE,//TRUE是创建打开文件对话框,FALSE则创建的是保存文件对 ...

  8. windows api打开文件对话框

    用windows api 写打开文件对话框主要使用OPENFILENAME ,GetOpenFileName, GetSaveFileName; 1.OPENFILENAME 结构体介绍:要使用Get ...

  9. C#打开文件对话框和文件夹对话框

    打开文件对话框OpenFileDialog OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "Excel文件(*.xls;*.x ...

最新文章

  1. JDK 序列化, 碰到serialVersionUID 不一致问题,怎么处理?
  2. Logistic Regression
  3. 设计模式之Dynamic Proxy-动态代理
  4. python特征选择工具_一个Python特征选择工具,助力实现高效机器学习
  5. Java StringBuilder subSequence()方法与示例
  6. CentOS 5 全功能WWW服务器搭建全教程
  7. 《系统工程》--课程笔记二(系统工程方法论)
  8. VS2019配置opencv-4.5.2-vc14_vc15
  9. hr标签---中心线:设置颜色
  10. java开发名言_java实现收藏名言语句台词的app
  11. 手把手教你安装虚拟机16
  12. 大学英语综合教程二 Unit 4 课文内容英译中 中英翻译
  13. PyTorch搭建卷积神经网络(ResNet-50网络)进行图像分类实战(附源码和数据集)
  14. jmeter计算测试QPS
  15. Java代码走查审查规范总结
  16. Android中TextView中的.setText和.append的区别
  17. html字重怎么设置,CSS 字重 font-weight
  18. Oracle.DataAccess.dll 下载 dll之家
  19. 2020年哨兵数据批量下载(USGS)
  20. npm run serve起项目报错node-sass not find

热门文章

  1. 使用xshell上传本地文件到服务器
  2. [渝粤教育] 广东-国家-开放大学 21秋期末考试服务标准化10011k1
  3. 【渝粤教育】国家开放大学2018年秋季 2111T病理学与病理生理学 参考试题
  4. [渝粤教育] 西南科技大学 服务管理 在线考试复习资料
  5. 【渝粤教育】电大中专常见病药物治疗 (2)作业 题库
  6. 物联网对石油燃气行业的作用
  7. java 拉丁文 unicode_“java语言使用的是Unicode编码”是指的jvm?.java文件?
  8. 别克gl8服务器返回数据为空,老司机教学:别克GL8商务车总线控制系统故障解决...
  9. ie浏览器升级_IE 被微软专家从浏览器里除名了,专家说它只是个兼容性解决方案...
  10. 富贵不压重发_为什么老人常说“贵人不顶重发”,“重发”是什么意思? ?...