读取文件的代码如下,但是数据是一起读出的,怎么用指针一个一个将数据读出然后再分别赋值?
本人新手,大家多多帮助啊void CModalDlg::OnRead() 
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
if(fileDlg.DoModal() == IDOK)
{
CString str = fileDlg.GetPathName();
FILE* pfile = fopen( str, "rt" ); 
fscanf(pfile,"%d",&m_x0);
TCHAR szBuf[MAX_PATH];
fread(szBuf, 1, MAX_PATH, pfile ); // 读取文件
GetDlgItem(IDC_x0)->SetWindowText(szBuf); // 写控件
fclose(pfile); 
}
}
MFCedit box

解决方案 »

  1.   

    fscanf(pfile,"%d",&m_x0);
    这句没有,不好意思打错了,剩下的部分怎么修改?
      

  2.   

    楼主你有几个edit控件?每个控件要赋的值之间有没有标识?
    或者可以让文件里每行数据对应一个控件,利用CStdioFile::ReadString每次读一行,赋给每个控件。
      

  3.   


       CString str = _T("12 23 344 45 56 67 78 999");//假设这是你从文件读出来的
       CStringArray saEdit[8]; //用来存放8个控件数据,
       int i = 0;
       while (str.GetLength())
       {
       i=str.Find(' '); //空格
       CString strtmp;
       if (-1!=i)
       {
      strtmp = str.Left(i);
      str=str.Mid(i+1);
       }
       else
       {
       strtmp=str;
       str=_T("");
       }   saEdit->Add(strtmp);
      
       }
    你试试
      

  4.   

    &m_x0  这个是什么呢?不会是个double变量吧?
    你知道sizeof(double)等于多少吗,
    贴个msdn的例子,楼主再看看吧,
    Example
    /* FREAD.C: This program opens a file named FREAD.OUT and
     * writes 25 characters to the file. It then tries to open
     * FREAD.OUT and read in 25 characters. If the attempt succeeds,
     * the program displays the number of actual items read.
     */#include <stdio.h>void main( void )
    {
       FILE *stream;
       char list[30];
       int  i, numread, numwritten;   /* Open file in text mode: */
       if( (stream = fopen( "fread.out", "w+t" )) != NULL )
       {
          for ( i = 0; i < 25; i++ )
             list[i] = (char)('z' - i);
          /* Write 25 characters to stream */
          numwritten = fwrite( list, sizeof( char ), 25, stream );
          printf( "Wrote %d items\n", numwritten );
          fclose( stream );   }
       else
          printf( "Problem opening the file\n" );   if( (stream = fopen( "fread.out", "r+t" )) != NULL )
       {
          /* Attempt to read in 25 characters */
          numread = fread( list, sizeof( char ), 25, stream );
          printf( "Number of items read = %d\n", numread );
          printf( "Contents of buffer = %.25s\n", list );
          fclose( stream );
       }
       else
          printf( "File could not be opened\n" );
    }
    Output
    Wrote 25 items
    Number of items read = 25
    Contents of buffer = zyxwvutsrqponmlkjihgfedcb
      

  5.   


    TCHAR szBuf[MAX_PATH]; 
    fread(szBuf, 1, MAX_PATH, pfile ); // 读取文件         
    GetDlgItem(IDC_x0)->SetWindowText(szBuf); // 写控件
     ?????
    你的数据是字符串吗?有 MAX_PATH-1 或者MAX_PATH-2 长度吗??
    这里结尾,没有设置结束符,你确定数据里有结束符吗,
    只有确定szBuf中存储了字符串,才可以SetWindowText(szBuf); 这样使用。
    通过二进制编辑器(一般用2位16进制显示一个字符,4位16进制显示一个汉字),可以查看文件的具体内容。0 这个整数,字符型(char)显示为 MBCS 00,UNICODE16 字符型(wchar_t)显示为 00 00 如果是32位整数 00 00 00 00 
    '0' 这个字符,MBCS (char)显示为30,UNICODE16(wchar_t) 显示为 30 00
    '\0' 这个字符,MBCS (char)显示为0,UNICODE16(wchar_t) 显示为 00 00 这个是字符串结束符。
        
    另外:
    MFC EDIT 控件,一般会 定义为 整数,浮点数,字符串,然后赋值;通过UpdateData(FALSE),从而调用动态数据交换,把数据从变量,传送到控件。而UpdateData(TRUE),UpdateData()则是, 调用动态数据交换,函数名是DoDataExchange,把数据从控件,传送到变量。
    也可以 定义为控件类型,那就可以直接操作了,有可能不需要UpdateDataEDIT控件快速操作,可以用Replace操作,SetWindowText()要比 Replace慢多了。
    虽然Replace代码更多,更复杂。
      

  6.   


    if(fileDlg.DoModal() == IDOK)
    {
    CString str = fileDlg.GetPathName();
    FILE* pfile = fopen( str, "rt" ); 
    fread( &m_x0, sizeof(double), 1, pfile);
    fread( &m_y0, sizeof(double), 1, pfile);
    fread( &m_f0, sizeof(double), 1, pfile);
    fread( &m_XT, sizeof(double), 1, pfile);
    fread( &m_YT, sizeof(double), 1, pfile);
    fread( &m_ZT, sizeof(double), 1, pfile);
    fread( &m_m, sizeof(double), 1, pfile);
    fread( &m_H, sizeof(double), 1, pfile);
    UpdateData(FALSE);//如果,数据正确的话,这样就可以显示了。
    fclose(pfile);
    }
      

  7.   

    另外文本文件还是用 fscanf,fprintf 读写比较好。