大家好,我最近编的一个程序,目的是通过一个按钮打开一个文件对话框,然后选择想要的文件,程序将这个文件的路径存储在一个文件中,并将这个路径显示到对话框上的一个编辑框中。我写的关于打开按钮的响应函数如下:
void CProp12::OnButton33() 
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="选择矩阵文件";
fileDlg.m_ofn.lpstrFilter="Text Files(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
CString m2=fileDlg.GetPathName();
m1=m_m2;
if(m1!="")
{
            CFile file1("CHANGE-1\\ERP\\CIVDP\\results\\matrixpath.dat",CFile::modeCreate|CFile::modeWrite);
file1.Write(m2,strlen(m2));
            file1.Close();

CFile file2(m1,CFile::modeRead);
char *pBuf;
DWORD dwFileLen;
dwFileLen=file2.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file2.Read(pBuf,dwFileLen);
file2.Close();
// MessageBox(pBuf);
SetDlgItemText(IDC_EDIT121,pBuf);
UpdateData(FALSE);

}

}
}
程序中的m1是与编辑框关联的cstring变量。程序编译能够通过,可是在运行的时候,点击按钮选择文件后却弹出一个对话框提示“CHANGE-1\\ERP\\CIVDP\\results\\matrixpath.dat中包含无效的路径”,我检查了好几遍路径都是正确的。PS:文件
CHANGE-1\\ERP\\CIVDP\\results\\matrixpath.dat是与程序放在一个文件夹中的,程序中还有其它模块,也用了类似的相对路径,只是没有打开文件对话框的内容,我就想是不是写的关于文件对话框的程序有错误?请各路高手指点迷津!!!

解决方案 »

  1.   

    调用这个函数后fileDlg.DoModal(),你的工作目录改变了,所以要用绝对路径。你也可以在调用这个函数前调用先调用GetCurrentDirectory获取工作目录,之后再调用SetCurrentDirectory设置回原来的工作目录。
      

  2.   

    要获取绝对路径 。。调用GetCurrentDirectory获取工作目录
      

  3.   

    最好用绝对路径。。
    GetCurrentDirectory这个函数会改变当前路径的。。
      

  4.   

    描述混了。。是文件选择对话框操作后,会改变当前路径,这样GetCurrentDirectory获取的路径就变了。