void CLogintView::OnOpen() 
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,//TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框 
    ".txt",//默认的打开文件的类型 
    NULL,//默认打开的文件名 
    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,//打开只读文件 
    "文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*||");//所有可以打开的文件类型 
   if(dlg.DoModal()==IDOK)   

CString m_FilePath = dlg.GetPathName();////////取出文件路径 
CString  m_path; 
m_path=m_FilePath;//将文件的路径放入m_path 
   }
   CStdioFile File;
   File.Open(m_path,CFile::modeRead|CFile::typeText );
   CString   strLine; 
   File.ReadString(strLine);不加最后一行打开文件没有问题 加了最后一行一打开就出错帮分析分析

解决方案 »

  1.   

    你的代码里有一个问题:
    if(dlg.DoModal()==IDOK)   
    {  
    CString m_FilePath = dlg.GetPathName();////////取出文件路径  
    CString m_path;  
    m_path=m_FilePath;//将文件的路径放入m_path  
    }上述代码中你CString m_path变量的定义是一个局部变量,其有效区域是在“{”和“}”之间的区域,离开
    这个区域后就会自动销毁。而你在m_path已经销毁后,又执行一下代码:CStdioFile File;
    File.Open(m_path,CFile::modeRead|CFile::typeText );此时,m_path里面的路径根本不是你所需要的路径。对于报错的原因,应该是文件的路径有误,导致文件打开失败,因此,你在读取文件的时候会报错。
    解决办法,代码如下:CString m_path = _T(""); 
    if(dlg.DoModal()==IDOK)   
    {  
    CString m_FilePath = dlg.GetPathName();////////取出文件路径   
    m_path=m_FilePath;//将文件的路径放入m_path  
    }CStdioFile File;
    BOOL bTag = File.Open(m_path,CFile::modeRead|CFile::typeText );
    CString strLine = _T("");  
    if (bTag)///<确保文件打开成功
    {
        File.ReadString(strLine);
    }
      

  2.   

    你这代码编译能通过???CString m_path的定义位置都不正确啊,File.Open时不可能认识m_path是什么玩意
      

  3.   

    我估计你是在这个类里的头文件中定义了一个m_path吧?你在对话框打开时,又定义一个同名变量,导致文件对话框读取的值只是写入了你临时定义的m_path中,并没有写入类成员变量m_path中。因此在后续代码区打开文件时,起始路径是空值,导致文件Open是失败的,所以File根本是空的,调用ReadString自然崩溃了。
      

  4.   

    以后在File.Open(m_path,CFile::modeRead|CFile::typeText );时,一定要判断返回值。只有成功打开时,才能对File进行操作,否则死路一条。