zoukankan      html  css  js  c++  java
  • 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() );
    	}

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

    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:Debug1.txt后,再获取程序所在的路径,这时不再是D:,而是C:Debug了。

    下面说下2种解决方案

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

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

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

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

    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);  


  • 相关阅读:
    [C语言
    [C语言
    [C语言
    [C语言
    [C语言
    [C语言
    [iOS]超详细Apache服务器的配置(10.10系统)
    IOS优秀博客
    「C」 数组、字符串、指针
    103.Binary Tree Zigzag Level Order Traversal(层序遍历)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318285.html
Copyright © 2011-2022 走看看