基于对话框的程序,调用CFileDlg后程序默认路径被改变
导致数据库,图片等使用相对路径失效
如何在调用CFileDlg后恢复程序默认路径呢?

解决方案 »

  1.   

    当然是在调用之前记录默认的相对路径,然后在关闭CFileDialog后,重新设置默认的相对路径了。
    问题是,如果有人在这台计算机的其它地方打开文件对话框选择了文件,那么默认相对路径也会改变,你怎么办呢?所以还是要用绝对路径。
      

  2.   

    CFileDialog fileDlg(...);
    fileDlg.m_ofn.lpstrInitialDir = _T("xxxxx"); //这里指定默认的路径
      

  3.   

    TCHAR szFilePath[MAX_PATH + 1];
    GetModuleFileName(NULL, szFilePath, MAX_PATH);  //获取当前EXE路径
    (_tcsrchr(szFilePath, _T('\\')))[1] = 0; //删除文件名,只获得路径
    CString strPath =  szFilePath;
            SetCurrentDirectory
    获取当前EXE路径,然后程序结束时候设置当前路径
    这样虽然Debug下有问题,但是发布之后就不存在问题
    不知道这样解决可以么
      

  4.   

    就是用SetCurrentDirectory()重新设置回CFileDialog打开前的当前目录
    或者用绝对路径,好的习惯应该是都用绝对路径
      

  5.   

    曾经我也被弄趴下过。
    后来:
    CFileDialog初始化的style加上OFN_NOCHANGEDIR就没问题了
      

  6.   

    相对路径用的是当前EXE所在路径