我做了一个小程序,实现将记录类型保存到流中,在把它分析成记录类型,可却发现不行,大家看看程序
procedure TForm1.Button1Click(Sender: TObject);
var
  Per:TPerson;
  Stream:TStream;
begin
  Per.Name:='sjb';
  Per.Age:=22;
  Per.Sex:=True;
  Stream:=TMemoryStream.Create;
  Stream.Write(Per,Sizeof(Per));
  Stream.Position:=0;
  Memo1.Lines.LoadFromStream(Stream);
  Showmessage(inttostr(Stream.Size));        //些处显示的是 12
  Stream.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  Per:TPerson;
  Stream:TStream;
  S:integer;
begin
  Stream:=TMemoryStream.Create;
  Memo1.Lines.SaveToStream(Stream);
  Stream.Position:=0;
  Stream.Read(Per,Sizeof(Per));
  Showmessage(inttostr(Stream.Size));     //些处显示的是 3
  if Per.Sex then
    S:=3
  else
    s:=4;
  ShowMessage('Name:'+Per.Name+#13+'Age:'+IntToStr(Per.Age)+#13+'Sex:'+Inttostr(s));
  Stream.Free;
end;
在最近显示的结果和原来的数据也不一样呀,差Age这,看它们的大小,差了8,不知道这8个字节的流丢哪去了,
大家帮忙看一下

解决方案 »

  1.   

    不应该用memo1 做中介!这样你定义的结构没什么用处了...
      

  2.   

    问题出在你的 TPerson 定义上!!! 我估计你用了 string, 所以会出现这种情况!!!
      

  3.   

    > Stream.Write(Per,Sizeof(Per));
    这是以二进制的格式解释流> Memo1.Lines.LoadFromStream(Stream);
    这是以正文格式解释流。对流的解释不一致。
      

  4.   

    我想请问zhuifeng529 (sjb) 你如何把
    Per.Age:=22;
      Per.Sex:=True;转成字符型?   这样memo又何可以读出再写入stream.这样写入的就是字符串了。
    又怎么转为int & boolean 啊?