本帖最后由 qwe70007 于 2013-07-31 01:03:32 编辑

解决方案 »

  1.   

    1。
    不需要关闭文件,因为只是获取路径,并没有打开文件
    2。
    你打开文件了吗,stream这个变量是否打开过文件,如果没有打开文件,肯定会不行的。另外,OK是关闭对话框,你在这里打开文件,接着关闭对话框了,这相当于没有打开文件
      

  2.   

    哦,我是先disable那个获取模态对话框的按钮,然后再enable获取文件名,最终点击ok(有updatedata)退出时就会出错。不知道到底是获取文件名未关闭引起错误,还是因为disable然后enable最后在updatedata这个步骤有错。
      

  3.   

    只要退出对话框时有updatedata就会报错,如果没有则不会。
      

  4.   

    你获取文件路径那里都没open当然不需要close啊   不知道你报错的那个fclose是哪里调到的CString pathName;
     
    CString strFilter = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");
     
    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | 
        OFN_OVERWRITEPROMPT, strFilter, this);
    dlg.m_ofn.lpstrTitle = _T("Choose file");
     
    if(dlg.DoModal() == IDOK)
    {
        pathName = dlg.GetPathName();
    }这段代码是没问题的
      

  5.   

    CFileDialog和打开文件没关系
    报错的时候你看看调用堆栈
    定位到自己的代码
    你应该还是有些文件操作没有处理好
    不过应该和CFileDialog无关
      

  6.   

    看你这样说,我在想你是updatedata(FALSE)了吗?想要将获取到的路径显示到什么地方吗?还是TRUE想要得到?很有可能是你更新的那个变量属于的那个窗口关闭了,或者不是当前窗口造成的,你调试一下试试看
      

  7.   

    问题终于找出来了,谢谢大家的回答,真的太谢谢大家了。问题出在我用:((CEdit*)GetDlgItem(IDC_EDIT)->SetWindowText(tmp);传递变量的值到控件显示时,则当退出对话框执行OnOk后就会出错,而直接用UpdateData(FALSE)则不会出错。这是什么原因,大家出现过这种情况么?
      

  8.   

    大概就是我说的那种情况,找不到控件所在的那个窗口了,还往哪儿update啊,你的IDC_EDIT这个控件是在关闭掉的那个窗口上,还是关闭以后显示的那个窗口上,如果在关闭掉的那个窗口上,你都关闭了,还update,他找不到目的地了,所以会报错,如果是关闭以后显示的窗口,你就不能用update了,可以用中间变量传递