CString str;
CFile myFile(D:\\abc.txt,CFile::modeRead);
CArchive arLoad(&myFile,CArchive::load);
myFile.SetToBegin();
arLoad.ReadString(str);
arLoad.Close();
myFile.Close();
运行后产生了如下异常情况:
CArchive exception: endOfFile.
update.exe 中的 0x7c812afb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012fba8 处的CArchiveException。在此我说明abc.txt这个文件是存在的,这个异常是读文件读到了文件的末尾,在此我希望高手能够告诉我怎么解决这个问题,谢谢!

解决方案 »

  1.   

    不要用这句:myFile.SetToBegin();  用myFile.Seek(0, CFile::begin); 
    不知道为什么myFile.SetToBegin();  有时候用起来屡次不成功。
    这是平时编程的时候遇到的
      

  2.   

    CArchive会自己管理文件指针的移动,不需要你设置,设置了反而有危险。
      

  3.   

    如果非要移动文件指针, 请在创建CArchive前
      

  4.   

    数据缓冲区读写之CArchive原理,可以参考参考
      

  5.   

    使用序列化必须注意一件事情:保存变量的顺序必须跟加载变量的顺序完全一致,例如 ar << a << b; 保存后,读取就必须是 ar >> a >> b; a和b的顺序不能颠倒,否则数据就错乱了。
      

  6.   


    CArchive会自己管理文件指针的移动,不需要你设置,设置了反而有危险。
      

  7.   

    CFile my(filename,CFile::modeWrite);
    CArchive arStore(&my,CArchive::store);
    arStore.WriteString("adjljjfakjlkkaf");
    这样不是按行写入一行内容吗?晕死
      

  8.   

    你再仔细看看MSDN的解释。
    WriteString仅仅写入字符串,不会自动写入\0或者回车换行,如果希望它保存回车换行,必须手动调用WriteString(_T("\r\n"));
    ReadString读取一行,它会扫描到回车换行或者文件结束才结束(在缓冲区足够大的情况下)。如果文件中没有添加回车换行,它直接读到文件结尾。对照你自己的情况看看问题在哪。