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


  • 相关阅读:
    文章用手,产品用心
    斌哥的 Docker 进阶指南
    你是想做个安静的程序员,还是去创个业呢?
    Java 8怎么了:局部套用vs闭包
    Cloud Insight支持阿里云一键接入了,so what?
    Nagios 快速实现数据可视化的几种方式
    uniapp 组件传参
    Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
    Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
    Vue绑定事件,双向数据绑定,只是循环没那么简单
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318285.html
Copyright © 2011-2022 走看看