第一个函数用来写文件,第二个函数用来读文件,写没问题,读为什么总是在显示‘success’后报内存错误?写文件的思想是先做一个标记*,然后是数据长度值,然后是数据域。读时根据标记读出数据域的长度值,然后读出数据域。
procedure TF_DatFile.Button1Click(Sender: TObject);
var
headstr:string;
headchar:char;
headsize:cardinal; contstr:string;
contint:integer;
contsize:cardinal;const
QuestionText: array[0..12] of string = ('A1型题', 'A2型题', 'A3型题',
'A4型题', 'B1型题', 'B2型题', 'X 型题', 'K 型题', '判断题', '填空题',
'名解题', '简答题', '问答题');
begin
TRY
FS:=TFileStream.Create('c:\1.dat', fmCreate);
headchar:='*';
FS.Write(headchar, sizeof(char));
contstr:=questionText[i];
contsize:=length(contstr);
FS.Write(contsize,sizeof(cardinal));
FS.Write(contstr,contsize);
FINALLY
FS.free;
end;
end;procedure TF_DatFile.BitBtn1Click(Sender: TObject);
var
FS: TFileStream;
contStr:string;
contsize:integer;
A:char;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
while (fs.Position<fs.Size) do
begin
FS.Readbuffer(A,sizeof(char));
if A='*' then
begin
FS.Read(contsize,sizeof(integer));
SetLength(contstr,contsize);
FS.Read(contstr,contsize);
showmessage(contstr);
end;
end;
FS.free;
showmessage('success');
end;
procedure TF_DatFile.Button1Click(Sender: TObject);
var
headstr:string;
headchar:char;
headsize:cardinal; contstr:string;
contint:integer;
contsize:cardinal;const
QuestionText: array[0..12] of string = ('A1型题', 'A2型题', 'A3型题',
'A4型题', 'B1型题', 'B2型题', 'X 型题', 'K 型题', '判断题', '填空题',
'名解题', '简答题', '问答题');
begin
TRY
FS:=TFileStream.Create('c:\1.dat', fmCreate);
headchar:='*';
FS.Write(headchar, sizeof(char));
contstr:=questionText[i];
contsize:=length(contstr);
FS.Write(contsize,sizeof(cardinal));
FS.Write(contstr,contsize);
FINALLY
FS.free;
end;
end;procedure TF_DatFile.BitBtn1Click(Sender: TObject);
var
FS: TFileStream;
contStr:string;
contsize:integer;
A:char;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
while (fs.Position<fs.Size) do
begin
FS.Readbuffer(A,sizeof(char));
if A='*' then
begin
FS.Read(contsize,sizeof(integer));
SetLength(contstr,contsize);
FS.Read(contstr,contsize);
showmessage(contstr);
end;
end;
FS.free;
showmessage('success');
end;
解决方案 »
- 初学多线程遇到疑难问题,调用的函数没法带参数?
- 求救:关于日期输入合法的问题,各位大哥帮帮忙,在线等
- 关于在Image上画图颜色问题,拜托,拜托了
- 谁能给我这数据库的密码 谢谢 急啊!!!!!
- 插入时间过长问题?(BDE连接)
- stringgrid和dbcombobox的问题
- 本想让它ping一次,label就显示一个结果出来,可是它直到循环执行完了才一次把所有结果显示出来,不知应该怎么做!
- 怎样用realAudio来实现读取缓冲区里的数据流?直接播放出来??
- ADODataSet1中怎样计算一个字段是值
- 如何生成容器式的应用程序?
- 显示图像的简单问题,如何让他按y轴显示数据(up有分)应该不太难,怎么没人领分呢?可是问了很久都没人能做出来?郁闷
- 问一个对系统操作的问题,是否有这样的API或控件?
if contsize > 0 then
Stream.write(contstr[1], contsize);read:
setlength(contstr, contsize);
if contsize > 0 then
begin
Stream.Read(contStr[1], contsize);
end;