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


  • 相关阅读:
    体验用yarp连接websocket
    从 ASP.NET Core 5.0 迁移到.NET 6
    对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。
    .NET6 WebAPI 自定义过滤器
    .NET6 WebApi 获取访问者IP地址
    .NET6 部署到 IIS
    .NET6 WebApi JSON传到前台默认变成小驼峰
    开发环境 测试环境 生产环境
    .NET6 WebApi 使用 log4net
    .NET6 WebApi 解决跨域问题
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318285.html
Copyright © 2011-2022 走看看