// TODO: 在此添加控件通知处理程序代码
CString strSuffix=L"*.*";
CString strDefaultFile = L"C:\\A\\B.gif";
CString szFilterFDlg;
szFilterFDlg.Format(L"Suit Files (*.%s)|*.%s|", strSuffix, strSuffix);
CFileDialog f(TRUE, strSuffix, strDefaultFile , OFN_HIDEREADONLY, szFilterFDlg, NULL);
//CFileDialog f(TRUE);
f.m_ofn.lpstrInitialDir = L"C:\\A"; //这写入初始目录
f.m_ofn.Flags |= OFN_NOCHANGEDIR;
if( IDOK == f.DoModal() )
{
AfxMessageBox( f.GetPathName() );
}
今天碰到一个奇怪的问题,代码如下
- // “文件对话框”执行前获取程序所在路径
- char szFilePath[MAX_PATH];
- GetCurrentDirectory(MAX_PATH, szFilePath);
- CString strFilePath = szFilePath;
- AfxMessageBox(strFilePath);
- CFileDialog dlg(TRUE);
- dlg.DoModal();
- // “文件对话框”执行后获取程序所在路径
- GetCurrentDirectory(MAX_PATH, szFilePath);
- strFilePath = szFilePath;
- AfxMessageBox(strFilePath);
我发现“文件对话框”执行前后,获取程序所在路径不一致,具体描述如下。假设我的可执行文件Test.exe
位于D:\下,则程序执行第一段得到的当前目录确实是D:\,程序执行打开”文件对话框“时,我选择打开
C:\Debug\1.txt后,再获取程序所在的路径,这时不再是D:\,而是C:\Debug\了。
下面说下2种解决方案
(1)笨方法:打开”文件对话框“执行前先将可执行文件所在路径保存到一个变量中,这样即使执行了
打开”文件对话框,也可以访问到执行打开”文件对话框“的那个路径
(2)其实,可以设置打开”文件对话框“不让其改变当前路径,具体代码如下,不解释
注意CFileDialog成员m_ofn中的Flags选项设置
- // “文件对话框”执行前获取程序所在路径
- char szFilePath[MAX_PATH];
- GetCurrentDirectory(MAX_PATH, szFilePath);
- CString strFilePath = szFilePath;
- AfxMessageBox(strFilePath);
- CFileDialog dlg(TRUE);
- dlg.m_ofn.Flags |= OFN_NOCHANGEDIR;
- dlg.DoModal();
- // “文件对话框”执行后获取程序所在路径
- GetCurrentDirectory(MAX_PATH, szFilePath);
- strFilePath = szFilePath;
- AfxMessageBox(strFilePath);