第一个函数用来写文件,第二个函数用来读文件,写没问题,读为什么总是在显示‘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;