具体问题是:现有一个文件,我想先用CFileDialog打开,然后我需要把打开文件中的一部分读入一个定义好的struct中,代码如下:
//******************************************************
void CC1a5View::rectif() 
{
 
CC1a5Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString FilePathname;
CString FileName;
CDC*pDC=GetDC();
CFile MyFile;
CFileDialog dlg( TRUE,_T("dat"),_T("*.dat"),
                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
                 _T("dat文件 (*.dat)|*.dat|"));
      if(IDOK==dlg.DoModal())
{

FilePathname.Format("%s %s","filepath:",dlg.GetPathName());
FileName.Format("%s %s","Old file name:",dlg.GetFileName());
MyFile.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary);
}
    pDC->TextOut(0,0,FileName);
pDC->TextOut(0,20,FilePathname);
pDC->TextOut(0,40,"文件被打开");
MyFile.Close(); md=&mhead1;
if(!MyFile.Open(dlg.GetFileName(), CFile::modeReadWrite))
{
AfxMessageBox("can't open the dat file");
return;
} MyFile.Seek(sizeof(mainhead),CFile::begin);
MyFile.Read(md,sizeof(mainhead));}
其中mainhead是我已经定义好的struct,如下
struct mainhead //数据头记录
{ unsigned short sat_lab;
unsigned short begin_year;
unsigned long begin_msecond;
unsigned short begin_days;;
unsigned short end_year;
unsigned long end_msecond;
unsigned short end_days;
}mhead1,*md;
//*************************************************************我的问题是我不知道为什么我在调试中看md始终是没有真正的读入要读入的内容,我是在哪个环节出了问题呢?
请各位帮忙看看,能给我举个实例最好了,先谢过了

解决方案 »

  1.   

    去掉这句试试MyFile.Seek(sizeof(mainhead),CFile::begin);
      

  2.   

    或者改成
    MyFile.Seek(0,CFile::begin);
      

  3.   

    stoneyrh()兄,你讲的两个方法我都试过了,还是不行啊。
      

  4.   

    CFile MyFile;
    CFileDialog dlg( TRUE,_T("dat"),_T("*.dat"),
                     OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
                     _T("dat文件 (*.dat)|*.dat|"));
    if(IDOK==dlg.DoModal())
    {
                 MyFile.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
                 struct mainhead mh;
                 mh.sat_lab = 9;
                 //write other data..
                 MyFile.Write((const void*)&mh, sizeof(struct mainhead));
                 MyFile.Close();             //begin read a structure
                 MyFile.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
                 struct mainhead *stRead = new  mainhead;
                 MyFile.Read((void*)stRead, sizeof(struct mainhead));
                 MyFile.Close();
    }
     
    //调试通过。稍微修改一下,就可以循环写入和读取了。
      

  5.   

    shallchen(shell) 兄:
    我需要读入的是用CFileDialog打开的那个.dat文件的一部分,即将.dat文件的开始部分读入到已经定义好的struct mainhead中,而不是自己写mainhead中的数据。请你帮忙再看看好吗?
    谢谢了! :)
      

  6.   

    if(IDOK==dlg.DoModal())
    条件语句包括到你要写的程序完