我用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;
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;
解决方案 »
- 关于DateTimePicker,如何使它能自动获得每月的最小值和最大值
- ad0query1中一个参数传
- SQL语句操作DBF的问题!!!
- 急招Delphi高手(深圳福田)做酒店管理系统
- oracle中,设定varchar2长度为4000,(最大只能存4000),为什么存到1333就不行了,多一个都不行,报 ORA-01480:trailling missing from STR bin
- api
- 有没有谁用过sybase,用query返回的数据集他说是只读的,是不是这样?很急
- 这样的功能delphi能实现吗???有高手能回答这个问题吗!
- 客户要求做个网上查询电费系统,用Delphi+?数据库好?
- [年末礼包]称重仪表数据解析控件代码(涵盖多数地磅仪表协议)
- IdUDPServer在send一个不存在的IP地址后会发生的错误能解决吗?
- fastreport分组打印问题
改成 BlockRead(bFile,stExam,sizeof(Exam)*num,NumRead);//在这里出错 “io error 998 EinoutError”
调试时当把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)
问题在这里解决了。迷途的羔羊,分全给你了,也谢谢你的帮助。