CFileDialog自动改变当前目录问题解决方案

	// 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() );
	}

今天碰到一个奇怪的问题,代码如下

[cpp]  view plain copy
  1. // “文件对话框”执行前获取程序所在路径  
  2.     char szFilePath[MAX_PATH];  
  3.     GetCurrentDirectory(MAX_PATH, szFilePath);  
  4.     CString strFilePath = szFilePath;  
  5.     AfxMessageBox(strFilePath);  
  6.       
  7.     CFileDialog dlg(TRUE);  
  8.     dlg.DoModal();  
  9.   
  10.     // “文件对话框”执行后获取程序所在路径  
  11.     GetCurrentDirectory(MAX_PATH, szFilePath);  
  12.     strFilePath = szFilePath;  
  13.     AfxMessageBox(strFilePath);  

我发现“文件对话框”执行前后,获取程序所在路径不一致,具体描述如下。假设我的可执行文件Test.exe

位于D:\下,则程序执行第一段得到的当前目录确实是D:\,程序执行打开”文件对话框“时,我选择打开

C:\Debug\1.txt后,再获取程序所在的路径,这时不再是D:\,而是C:\Debug\了。

下面说下2种解决方案

(1)笨方法:打开”文件对话框“执行前先将可执行文件所在路径保存到一个变量中,这样即使执行了

打开”文件对话框,也可以访问到执行打开”文件对话框“的那个路径

(2)其实,可以设置打开”文件对话框“不让其改变当前路径,具体代码如下,不解释

注意CFileDialog成员m_ofn中的Flags选项设置

[cpp]  view plain copy
  1. // “文件对话框”执行前获取程序所在路径  
  2.     char szFilePath[MAX_PATH];  
  3.     GetCurrentDirectory(MAX_PATH, szFilePath);  
  4.     CString strFilePath = szFilePath;  
  5.     AfxMessageBox(strFilePath);  
  6.       
  7.     CFileDialog dlg(TRUE);  
  8.     dlg.m_ofn.Flags |= OFN_NOCHANGEDIR;  
  9.     dlg.DoModal();  
  10.   
  11.     // “文件对话框”执行后获取程序所在路径  
  12.     GetCurrentDirectory(MAX_PATH, szFilePath);  
  13.     strFilePath = szFilePath;  
  14.     AfxMessageBox(strFilePath);  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值