读DAT文件的错误 EinoutError

goregrypeck 2008-07-26 08:39:40
我用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;



...全文
189 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goregrypeck 2008-07-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080728/10/19b70bd4-7616-4954-820e-683ba9c7ff91.html
问题在这里解决了。

迷途的羔羊,分全给你了,也谢谢你的帮助。

kugoo_2006 2008-07-26
  • 打赏
  • 举报
回复
重叠 I/O 事件不在信号状态中
goregrypeck 2008-07-26
  • 打赏
  • 举报
回复
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)
goregrypeck 2008-07-26
  • 打赏
  • 举报
回复
BlockRead(bFile,stExam,sizeof(Exam)*10,NumRead);//在这里出错 “io error 998 EinoutError”
改成 BlockRead(bFile,stExam,sizeof(Exam)*num,NumRead);//在这里出错 “io error 998 EinoutError”

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧