CFile m_file;
CFileException e;
if (!m_file.Open(szPack,CFile::modeRead | CFile::shareDenyWrite ,&e))
{
e.ReportError();
return;
}在 if (!m_file.Open(szPack,CFile::modeRead | CFile::shareDenyWrite ,&e)) 这里程序异常退出
请问怎么处理呢?
CFileException e;
if (!m_file.Open(szPack,CFile::modeRead | CFile::shareDenyWrite ,&e))
{
e.ReportError();
return;
}在 if (!m_file.Open(szPack,CFile::modeRead | CFile::shareDenyWrite ,&e)) 这里程序异常退出
请问怎么处理呢?
解决方案 »
- 如何自动按规则生成保存的文件名称?
- 我用VC++写SMTP电子邮件程序是HELO命令为什么不能成功执行?
- 服务器怎么推送消息到客户端
- 通过进程句柄怎么取得进程ID
- ATL控件中如何取得Internet Explorer_Server对象?
- EDIT或者RICHEDIT制作OUTPUT窗口问题
- CPropertySheet做的属性页对话框........................................................如何才能获取page1的信息
- 大家知道数字米开朗基罗吧,我委托别人申请下载的授权,大家看看回信,气死我了
- 《Window程序设计》(第5版)好不好 适合于初学者么 谢谢
- 如何在VC6 "APP Wizard (dll)"创建的一个工程中使用ADO呢?
- 在查询时:出现某
- BSTR 判断文档是否加载完毕
debug不会发生异常
release版本才会发生异常
ASSERT
这样的语句!!
可能是这里的错误!!
最后能跟踪到CFile::Open()函数的这里:if (hFile == INVALID_HANDLE_VALUE)
{
if (pException != NULL)
{
pException->m_lOsError = ::GetLastError();
pException->m_cause =
CFileException::OsErrorToException(pException->m_lOsError); // use passed file name (not expanded vesion) when reporting
// an error while opening pException->m_strFileName = lpszFileName;
}
return FALSE;
}
参数szPack指定的文件是不存在的
但是在debug版本下没有异常
只会在release版本下发生异常
assert弹出断言
不是异常
我运行你的这段代码没有异常啊,debug和release都没有异常,就给个提示说路径不存在。
建议你clean下,再重新编译下试试,或者看看别的地方有没有什么冲突的。
void Ctestc2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 CFile m_file;
CFileException e;
char szPack[MAX_PATH];
memset(szPack,0,MAX_PATH); sprintf(szPack,"%s","D:\\A.TXT");
if (!m_file.Open(szPack,CFile::modeRead | CFile::shareDenyWrite ,&e))
{
e.ReportError();
TRACE("NOTOPENED");
return;
}
else
{
TRACE("OPENED");
}}DEBUG/RELEASE 下都没有发现什么问题 我的环境是vs2008
CFile::Open()本身就可以判断文件是否存在的啊
看看你的 m_file还做过别的什么操作没,或者打开了别的文件,忘了关闭什么的。。
把Debug 和 Release 文件夹下的东西删掉了,在重新编译下还是出异常么?
他只是读,就算文件不存在也不应该有异常啊,
要是有CFile::modeCreat,如果路径不存在会有异常
捕获异常,发生异常时处理,而不是退出程序
debug没问题而release有问题
我估计是项目的属性配置不一样引起的
我加入了try catch语句之后就解决了
我现在纳闷的是为什么debug不需要加入捕获异常呢?
debug在open失败时执行
e.ReportError();
return;
而release在open失败时崩溃
为什么呢?