在Vc中,只要对象从CObject继承,就可以用序列化
直接从文 件中读写出一个对象,
在Delphi中有什么相应的处理吗?比如说有THuman类,然后从THuman派生出TMan和TWoman,
现在有一个TMan的实例,两个TWoman的实例,
想写入一个文件,如果以后想从文件中读出这些数据,
如何构造出这三个对象的实例。高手指点迷津。

解决方案 »

  1.   

    >>在Vc中,只要对象从CObject继承,就可以用序列化
    從 TPersistent 中繼承>>想写入一个文件,如果以后想从文件中读出这些数据,
    >>如何构造出这三个对象的实例。參考幫助 TReader, TWriter
      

  2.   

    //刚刚写了一个例程给你,其中有两个属性,注意字符串因为不定长,所以要先存它的长度
    //测试没问题
    unit MyObj;interface
    uses Classes,SysUtils;
    type
    TMyObject=class(TPersistent)
      public
      Property1:integer;
      Property2:string;
      procedure SaveToFile(const FileName: string); virtual;
      procedure SaveToStream(Stream: TStream); virtual;
      procedure LoadFromFile(const FileName: string); virtual;
      procedure LoadFromStream(Stream: TStream); virtual;
    end;
    implementation{ TMyObject }procedure TMyObject.LoadFromFile(const FileName: string);
    var
      Stream: TStream;
    begin
      Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
      try
        LoadFromStream(Stream);
      finally
        Stream.Free;
      end;
    end;procedure TMyObject.LoadFromStream(Stream: TStream);
    var
      strlen:integer;
    begin
      Stream.Read(Property1,4);
      Stream.Read(strlen,4);
      Stream.ReadBuffer(Property2,strlen);
    end;procedure TMyObject.SaveToFile(const FileName: string);
    var
      Stream: TStream;
    begin
      Stream := TFileStream.Create(FileName, fmCreate);
      try
        SaveToStream(Stream);
      finally
        Stream.Free;
      end;
    end;procedure TMyObject.SaveToStream(Stream: TStream);
    var
      strlen:integer;
    begin
      Stream.Write(Property1,4); //写一个整数
      strlen:=Length(Property2);
      Stream.Write(strlen,4);
      Stream.WriteBuffer(Property2,strlen);
    end;end.