CFileDialog打开文件对话框会修改程序的默认路径,怎么办?

时间:2022-11-15 15:34:07

CFileDialog dlg(true );
if (dlg.DoModal()==IDOK)
{
    path = dlg.GetPathName();
    pLogFile = fopen("Log.txt", "wt+");    
    fprintf(pLogFile, "%s", (LPCSTR)path);   
    fclose(pLogFile);
    pLogFile = NULL;
}

工程目录下有一个Log.txt的日志文件,我想弹出一个打开文件对话框,
选择一个文件后,想把选择的这个文件全路径记录到日志文件中。但是
我发现在工程目录下的Log.txt中根本没有写入,而是在刚才打开文件
对话框选择的路径下创建一个新的Log.txt。
也就是打开文件对话框修改了默认路径,使得默认路径不是当前工程目录了,
请问怎么让打开文件对话框的时候,不修改默认路径呢?

7 个解决方案

#1


自己用GetCurrentDirectory看一下当前目录
再说了,你都dlg.GetPathName了,就用返回的文件路径得了

#2


你可以指定初始路径,OPENFILENAME结构体中的lpstrInitialDir成员

#3


在最开始获取当前路径,
CString strPath;
GetCurrentDirectory(MAX_PATH,strPath.GetBuffer(MAX_PATH));

然后在文件打开设置这个绝对路径

#4



CFileDialog fd(TRUE);
//                  
if(strlen(m_KeptPath)==0) fd.m_ofn.lpstrInitialDir="D:\\";
else    fd.m_ofn.lpstrInitialDir=m_KeptPath;
fd.m_ofn.lpstrDefExt=".arc";
fd.m_ofn.Flags|=OFN_PATHMUSTEXIST;//
fd.m_ofn.Flags|=OFN_NOCHANGEDIR;//keep same dir
//
if (fd.DoModal()==IDCANCEL) return;

#5


先获得,当前程序的目录和文件名
TCHAR szWorkPath[MAX_PATH];
DWORD nLen = GetModuleFileName(NULL, szWorkPath, sizeof(szWorkPath));
再去掉,文件名
          *(_tcsrchr(szWorkPath,_T('\\'))+1)=NULL;
         CString strDir = szWorkPath;
log文件名
         CString strLog = strDir + _T("Log.txt");

#6


重新获得路径

#7



找到答案了!!!
即再创建CFileDialog时这样设置:
CFileDialog fileDiaog(TRUE, NULL, NULL, OFN_NOCHANGEDIR); 

#1


自己用GetCurrentDirectory看一下当前目录
再说了,你都dlg.GetPathName了,就用返回的文件路径得了

#2


你可以指定初始路径,OPENFILENAME结构体中的lpstrInitialDir成员

#3


在最开始获取当前路径,
CString strPath;
GetCurrentDirectory(MAX_PATH,strPath.GetBuffer(MAX_PATH));

然后在文件打开设置这个绝对路径

#4



CFileDialog fd(TRUE);
//                  
if(strlen(m_KeptPath)==0) fd.m_ofn.lpstrInitialDir="D:\\";
else    fd.m_ofn.lpstrInitialDir=m_KeptPath;
fd.m_ofn.lpstrDefExt=".arc";
fd.m_ofn.Flags|=OFN_PATHMUSTEXIST;//
fd.m_ofn.Flags|=OFN_NOCHANGEDIR;//keep same dir
//
if (fd.DoModal()==IDCANCEL) return;

#5


先获得,当前程序的目录和文件名
TCHAR szWorkPath[MAX_PATH];
DWORD nLen = GetModuleFileName(NULL, szWorkPath, sizeof(szWorkPath));
再去掉,文件名
          *(_tcsrchr(szWorkPath,_T('\\'))+1)=NULL;
         CString strDir = szWorkPath;
log文件名
         CString strLog = strDir + _T("Log.txt");

#6


重新获得路径

#7



找到答案了!!!
即再创建CFileDialog时这样设置:
CFileDialog fileDiaog(TRUE, NULL, NULL, OFN_NOCHANGEDIR);