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)) 这里程序异常退出
请问怎么处理呢?

解决方案 »

  1.   

    补充一下
    debug不会发生异常
    release版本才会发生异常
      

  2.   

    看看你的程序里面有没有
    ASSERT
    这样的语句!!
    可能是这里的错误!!
      

  3.   

    就是异常啊
    最后能跟踪到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;
    }
      

  4.   

    再次补充下:
    参数szPack指定的文件是不存在的
    但是在debug版本下没有异常
    只会在release版本下发生异常
      

  5.   

    回3楼
    assert弹出断言
    不是异常
      

  6.   


    我运行你的这段代码没有异常啊,debug和release都没有异常,就给个提示说路径不存在。
    建议你clean下,再重新编译下试试,或者看看别的地方有没有什么冲突的。
      

  7.   


    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
      

  8.   

    回楼上
    CFile::Open()本身就可以判断文件是否存在的啊
      

  9.   

    跟项目的设置应该没太大的关系,我都用得默认设置,
    看看你的 m_file还做过别的什么操作没,或者打开了别的文件,忘了关闭什么的。。
    把Debug 和 Release 文件夹下的东西删掉了,在重新编译下还是出异常么?
      

  10.   


    他只是读,就算文件不存在也不应该有异常啊,
    要是有CFile::modeCreat,如果路径不存在会有异常
      

  11.   

    try catch
    捕获异常,发生异常时处理,而不是退出程序
      

  12.   

    szPack是什么类型?看看是不是无效指针。
      

  13.   

    代码是一样的
    debug没问题而release有问题
    我估计是项目的属性配置不一样引起的
      

  14.   

    szPack的赋值时,有没有检查写入内容的长度,是不是越界了
      

  15.   

    szPack是没问题的
    我加入了try catch语句之后就解决了
    我现在纳闷的是为什么debug不需要加入捕获异常呢?
    debug在open失败时执行
    e.ReportError(); 
    return; 
    而release在open失败时崩溃
    为什么呢?
      

  16.   

    保证 其他程序没占用你要打开的文件。 最好try catch下