我用delphi  读vc写的一个DAT 文件 在  BlockRead(bFile,stExam,sizeof(Exam)*10,NumRead) 这句时出错并怎么调也过不去。  以下是代码:DAT 文件格式
        Head=record
        wHead:DWORD; //文件头标识(判断是否有损坏)
        cGrade:array[0..49] of ansichar; //年级
        cClassarray:array[0..49] of ansichar; //班级
        cCoursearray:array[0..49] of ansichar; //考试科目
        cExamTimearray:array[0..19] of ansichar; //考试时间
        cTimeSavedarray:array[0..19] of ansichar;         //保存该DAT文件的时间
        nNumStud:integer;       //考生的人数
        nNumSub:integer; //题目的数量
        BReserved:array[0..9] of Byte; //保留字
        end;
        Exam=record
        cStuID: array[0..11] of ansichar; //学生学号
        fScore:single;         //学生成绩
        BAnswer:array[0..163] of Byte; //每道题的得分情况(设计最大为164道题)0x1:A,0x2:B,0x4:C,0x8:D
        fUnit:array[0..163] of single; //每道题的分值
        end;        pExam = ^Exam;***********************************8
procedure TForm1.Button1Click(Sender: TObject);
        Var
         bFile:file;
         NumRead:integer;
         stHead:Head;
         stExam:array of pExam;
         i:integer;
         num:integer;
begin        AssignFile(bFile,'c:\111.dat');
        Reset(bFile,1);
        BlockRead(bFile,stHead,Sizeof(stHead),NumRead);
        num:=stHead.nNumStud;        SetLength(stExam,num);        for i:=0 to num-1 do
        begin
                GetMem(stExam[i],Sizeof(Exam));
        end;        BlockRead(bFile,stExam,sizeof(Exam)*10,NumRead);//在这里出错   “io error 998  EinoutError”           for i:=0 to num do
        begin
                FreeMem(stExam[i]);
        end;        stExam:=nil;
        CloseFile(bFile);        end;

解决方案 »

  1.   

    BlockRead(bFile,stExam,sizeof(Exam)*10,NumRead);//在这里出错  “io error 998  EinoutError”
    改成 BlockRead(bFile,stExam,sizeof(Exam)*num,NumRead);//在这里出错  “io error 998  EinoutError”
      

  2.   

    num:=stHead.nNumStud; //这里从文件得到的是 num=10
    调试时当把num改为 num=1 时 BlockRead(bFile,stExam,sizeof(Exam)*num,NumRead);   这句不会出错
    当改为 num = 10 就是文件里读到的值时 BlockRead(bFile,stExam,sizeof(Exam)*num,NumRead);   出了上面的错, 这时  sizeof(Exam)*num = 8663(调试中) 
    是不是  8663 太大二出的错,可是我用了 Reset(bFile,1)
      

  3.   

    http://topic.csdn.net/u/20080728/10/19b70bd4-7616-4954-820e-683ba9c7ff91.html
    问题在这里解决了。迷途的羔羊,分全给你了,也谢谢你的帮助。