void Cadress3Dlg::OnBnAdd()
{
if(!UpdateData(true))
{
return;
}
CFile mFile;
if(mFile.Open(L"c:\\tian.dat",CFile::modeCreate|CFile::modeReadWrite))
{
mFile.Write(&m_start,sizeof(m_start));
}}
void Cadress3Dlg::OnBnRead()
{
CFile mFile;
if(mFile.Open(L"c:\\tian.dat",CFile::modeReadWrite))
{
mFile.Read(&m_in,sizeof(m_in));
}
UpdateData(false);
//if(mFile.
}错误在那?我通过编辑框添加变量,然后要求在列表框中显示,其中m_in为列表框的变量,m_start为编辑框的变量.

解决方案 »

  1.   

    mFile.Write(&m_start,sizeof(m_start));
    mFile.Close();
      

  2.   

    mFile.Write(&m_start,sizeof(m_start));
    如果你的m_start是CString类型,用sizeof得到大小的做法是错误的。
      

  3.   

    同样,你后面的Read代码也同样是错误的。
    mFile.Read(&m_in,sizeof(m_in)); 
    这里第二个参数是要指定你读取多长。而不是你需要写入的目的串分配了多长
      

  4.   

      m_start的格式为int.m_in的格式也是int型.为什么我编辑框就可以显示出来,列表框就不行.
      

  5.   

    m_in是什么啊?列表框?什么控件CListBox?
    自己AddString上去看看
      

  6.   

    把.dat改成.txt试下
    用二进制模式试下。
      

  7.   

    [Quote=引用 8 楼  的回复:]
    把.dat改成.txt试下
    用二进制模式试
    试过了,还是不行.
      

  8.   

    你贴的代码没有错,错在m_start和m_in是对象(从你调用UpdateData推测),对象不是你那样使用的,写的时候,你要找到对象真正保存数据的地址,传给Write函数。
    读的时候,你要先读入到基本数据类型里,比如数组(数组也可以说不是基本数据类型,但它肯定可用于文件读取),再赋给对象。
      

  9.   

    如果我没猜错,你的m_start和m_in是CString类型。则:
    mFile.Write((LPCTSTR) m_start, m_start.length() * sizeof(TCHAR));TCHAR buff[1024];
    mFile.Read(buff, sizeof(buff));
    m_in = buff;
      

  10.   

    为什么我给编辑框定义一个int型的m_tt,编辑框就可以显示出我在m_start中输入的数值,而改为列表框的时候就读取不到,数据类型是没变的.
      

  11.   

    mFile.Write(&m_start,sizeof(m_start));
    你这里我不知道你的m_start是什么类型,如果是CString你可以这样int leng=m_start.Getlenght();
    mFile.Write(7m_start,sizeof(leng));
    如果是string的话你可以用strlen(m_start);
    mFile.Write(&m_start,sizeof(m_start));
      

  12.   

    CString 求长度用.length()。要在列表框显示用addstring()方法。
      

  13.   

    经观察,读写文件没问题你的列表框应该是 combox吧这个关联int值 不是直接在 combox 框里直接显示的,而是 combox的第几个选项如果你读取的m_in 大于combox 框里面的条数 combox是不会改变的