- 版本
VS2012
- 实例说明
在使用CFileDialog类选中文件时如果没有指定OFN_ALLOWMULTISELECT取值,就只能选中一个文件,本实例列出选中的对个文件
- 界面
- 关键技术
本实例主要使用CFileDialog类的构造函数、GetStartPosition和GetNextPathName函数实现。
(1)CFileDialog构造函数
基本格式如下:
CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL,
参数说明如表所示
CFileDialog函数的参数说明
参数 | 说明 |
bOpenFileDialog |
设置为true,创建打开对话框:设置为false,创建保存对话框 |
lpszDefExt |
指定文件默认扩展名 |
lpszFileName
|
初始化文件名 |
dwFlags
|
指定对话框的风格 |
lpszFilter
|
过滤器,指明可供选择的文件类型和相应的扩展名 |
pParentWnd |
父窗口指针 |
说明
参数lpszFilter格式如下:
"Chart Files(*.xlc)|*.xlc|Worksheet Files(*.xls)|*.xls|Data Files(*.xlc;*.xls|*xlc;*.xlc|All Files(*.*)|*.*||";
文件类型说明和扩展名间用“|”分隔,同种类型文件的扩展名间可以用“;”分隔,每种文件类型间用“|”分隔,末尾用“||”指明。
(2)GetStartPosition函数
对于选择了多个文件的情况,该函数用于获取第一个文件的位置。基本格式如下:
POSITION GetStartPosition() const;
返回值:返回用于迭代的POSITION类型变量。如果列表为空,返回NULL。
(3)GetNextPathName函数
对于选择了多个文件的清空得到下一个文件位置,并返回当前文件名。在此之前需先调用GetStartPosition函数得到最初的POSITION变量。基本格式如下:
CString GetNextPathName(POSITION&pos)const;
参数说明:
pos:由GetNextPathName或GetStartPosition函数返回的POSITION变量的引用。
返回值:返回文件的全路径
- 设计过程
(1)新建一个基于对话框的应用程序。
(2)向窗体中添加一个按钮控件,执行OnOpen函数。添加列表框控件,显示所选文件。
(3)主要代码如下:
void CDemoDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog log(TRUE, "文件", "*.*", OFN_HIDEREADONLY| OFN_ALLOWMULTISELECT, "FILE(*.*)|*.*||", NULL); if (log.DoModal() == IDOK) { POSITION pos = log.GetStartPosition(); while (pos != NULL) { CString pathname = log.GetNextPathName(pos);//获取文件名 m_files.AddString(pathname);//添加到列表框控件 } } }
批量删除指定类型的文件
按照本实例方法,获取所选文件的路径,调用静态方法CFile::Remove循环删除指定的文件。
- 演示
Caesar卢尚宇
2021年1月30日