用CFileDialog获得一个文件的路径后需要关闭这个文件么? 本帖最后由 qwe70007 于 2013-07-31 01:03:32 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1。不需要关闭文件,因为只是获取路径,并没有打开文件2。你打开文件了吗,stream这个变量是否打开过文件,如果没有打开文件,肯定会不行的。另外,OK是关闭对话框,你在这里打开文件,接着关闭对话框了,这相当于没有打开文件 哦,我是先disable那个获取模态对话框的按钮,然后再enable获取文件名,最终点击ok(有updatedata)退出时就会出错。不知道到底是获取文件名未关闭引起错误,还是因为disable然后enable最后在updatedata这个步骤有错。 只要退出对话框时有updatedata就会报错,如果没有则不会。 你获取文件路径那里都没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();}这段代码是没问题的 CFileDialog和打开文件没关系报错的时候你看看调用堆栈定位到自己的代码你应该还是有些文件操作没有处理好不过应该和CFileDialog无关 看你这样说,我在想你是updatedata(FALSE)了吗?想要将获取到的路径显示到什么地方吗?还是TRUE想要得到?很有可能是你更新的那个变量属于的那个窗口关闭了,或者不是当前窗口造成的,你调试一下试试看 问题终于找出来了,谢谢大家的回答,真的太谢谢大家了。问题出在我用:((CEdit*)GetDlgItem(IDC_EDIT)->SetWindowText(tmp);传递变量的值到控件显示时,则当退出对话框执行OnOk后就会出错,而直接用UpdateData(FALSE)则不会出错。这是什么原因,大家出现过这种情况么? 大概就是我说的那种情况,找不到控件所在的那个窗口了,还往哪儿update啊,你的IDC_EDIT这个控件是在关闭掉的那个窗口上,还是关闭以后显示的那个窗口上,如果在关闭掉的那个窗口上,你都关闭了,还update,他找不到目的地了,所以会报错,如果是关闭以后显示的窗口,你就不能用update了,可以用中间变量传递 程序中VC自带的两个头文件中的结构定义冲突 求助!!!!!!MFC数据转化成图形 RichEdit控件 【【【【花费 3年 时间收集的C++&VC资料库,奉献给哥哥们】】】】 vc++ mschart怎么用啊? 如何去掉word中“应用程序初始化可能不安全的activex控件”警告 北京农展馆的招聘会谁去了 我差点被踩死 MFC 新手tree control 删除的问题 [原创/讨论] Windows 核心编程研究系列之二:读取物理内存地址中的内容 过生日,18岁了散分。 GetTextExtent msdn中的解释不太明白啊 一个检测usb的程序中的代码,求解读
不需要关闭文件,因为只是获取路径,并没有打开文件
2。
你打开文件了吗,stream这个变量是否打开过文件,如果没有打开文件,肯定会不行的。另外,OK是关闭对话框,你在这里打开文件,接着关闭对话框了,这相当于没有打开文件
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();
}这段代码是没问题的
报错的时候你看看调用堆栈
定位到自己的代码
你应该还是有些文件操作没有处理好
不过应该和CFileDialog无关