首先在Dialog上添加控件如下图:
在OnSelectFile()中添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
CFileDialog m_ReadDlg(TRUE);
m_ReadDlg.m_ofn.lpstrTitle=
"New File"
;
//title of the CFiledialog
m_ReadDlg.m_ofn.lpstrFilter=
"csv file *.csv\0*.csv\0All File(*.*)\0*.*\0\0"
;
if
(IDOK==m_ReadDlg.DoModal())
{
m_FileName=m_ReadDlg.GetPathName();
CString str=m_FileName.Mid(m_FileName.ReverseFind(
'.'
)+1);
if
(str!=
"csv"
)
{
MessageBox(
"Please check the file!"
);
return
;
}
UpdateData(FALSE);
// m_ReadFile.ReadCsvfile(m_FileName);
|
代码说明:
m_ofn 是类型 OPENFILENAME结构。 此结构的数据表示 CFileDialog的当前状态。使用此结构初始化 打开的文件 或 保存文件 对话框的外观,在构造之后,但是,在显示其与 DoModal 方法。
CString::mid()用法参考上一篇文章
此时,m_FileName保存了文件的路径,下面继续做读文件操作。
文件的保存方式与读取方式基本相同:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
CString strFile;
CString defExe(
"dat"
);
CString defFileName(
"*.dat"
);
CString defFilter(
"数据文档(*.dat)|*.dat|所有文件(*.*)|*.*|"
);
CFileDialog dlg(
true
,defExe,defFileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,defFilter);
dlg.m_ofn.lpstrInitialDir=
"c:\\windows\\"
;
//指定默认打开的文件夹
if
(dlg.DoModal()==IDOK)
{
strFile = dlg.GetPathName();
MessageBox(strFile);
}
在上述代码中,我们指定了一个默认的文件夹“C:\windows”,当你运行上段代码时,文件选择对话框就会打开你设置的默认文件夹;如果此文件夹不存在,就会打开它自己默认的文件夹,比如“我的文档”。
上述代码中,defExe是定义了默认打开的文件类型(扩展名),defFileName则定义了打开的文件名,defFilter是过滤文件类型。 当你点击“确定”,就会进入
if
语句中,strFile则得到你选择的文件全部路径,如 “C:\windows\system32\cmd.exe”等。
|
运行效果如下图:
具体使用方法还是查看MSDN或者百度搜 CFileDialog的用法
浏览文件夹对话框
如下图
打开一个文件夹对话框没有现成的MFC类可用,需要借助一类称为Shell操控的API函数。
其实说白了直接将下面的代码复制到你的代码里,然后利用savepath2的路径即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
BROWSEINFO bi;
ZeroMemory(&bi,
sizeof
(BROWSEINFO));
//指定存放文件的默认文件夹路径
bi.lpszTitle=
"请选择文件夹"
;
//添加提示语句
bi.ulFlags=0x0040 | BIF_EDITBOX;
//添加“新建文件夹项”
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
//以默认路径打开浏览文件夹对话框
TCHAR
* savepath =
new
TCHAR
[MAX_PATH];
CString savepath2=
""
;
if
(pidl != NULL)
{
SHGetPathFromIDList(pidl,savepath);
//把文件夹路径存放在savepath中
savepath2.Format(_T(
"%s"
),savepath);
savepath2=savepath2+
"\\"
;
//在路径后增加斜杠
if
(SUCCEEDED(SHGetMalloc(&pMalloc)))
//网上说pidl指向的对象用完应该释放
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
MessageBox(savepath2);
//显示所选文件夹路径
|