我以前写文件的异常处理是这样的:        TRY 
        {
            CStdioFile file;
            file.Open( lpFilePath, CStdioFile::modeRead );
            file.ReadString( m_string );
            file.Close();
        }
        CATCH (CFileException, e)
        {
         e->ReportError();
        }
        END_CATCH
如果改成这样:        CStdioFile file;
        CFileException fe;        file.Open( lpFilePath, CStdioFile::modeRead, &fe );
        file.ReadString( m_string );
        file.Close();
不知上面对异常的处理对不对?第二种写法也不知行不行,希望指点一下!

解决方案 »

  1.   

    第二种,在 Open 的时候,需要检查返回值是否是 0,如果是 0, 表示打开失败
      

  2.   

    我试了下第一种,当文件不存在的时候,在file.ReadString( m_string );处就会产生断言错误,而并没有跳转入CATCH语句块,不知为何?我对异常处理只是了解,并没有怎么实际用过,还望指点下我上面的代码该如何修改,谢谢!!
      

  3.   

    BOOL ReadString(CString& rString);
    throw( CFileException );或者你干脆 if语句 这个ReadString返回是个BOOL 类型
      

  4.   

    就是没有检查 Open 的返回值的问题
      

  5.   

    如果检查了Open语句和各个操作的结果,那么还需要异常吗?        CStdioFile file;        if( !file.Open( lpFilePath, CStdioFile::modeRead ) ) return;
            if( !file.ReadString( m_string ) ) { file.Close(); return; }
            file.Close();
      

  6.   

    异常是处理特殊情况,包括内存不能分配,文件共享错误,磁盘读写错误等,不是说返回值完全不需要了。具体是否需要检查返回值,不同的函数有不同的实现。Open 函数的返回值必须进行检查的,ReadString 就没有必要了,因为 0 代表没有读取任何字符串。