文件的读写有关问题,针对对象的读写

文件的读写问题,针对对象的读写!
我自定义了一个类:TBWSample(这个类中只有几个整形的数组,bool型数组和TColor数组)

在测试程序中,我有写入和读取这个类的代码如下:
procedure   TfrmMain.FormCreate(Sender:   TObject);
var
    fp   :   integer;
begin                                                                    
    bw   :=   TBWSample.Create(Self);
    if   FileExists( 'BWSample ')   then
    begin
        fp   :=   FileOpen( 'BWSample ',0);
        if   fp   >   0   then
        begin
            FileRead(fp,bw,bw.InstanceSize);
            FileClose(fp);
        end;
    end
end;
procedure   TfrmMain.FormDestroy(Sender:   TObject);
var
    fp   :   integer;
begin
    fp   :=   FileCreate( 'BWSample ');
    if   fp   >   0   then
    begin
        FileWrite(fp,bw,bw.InstanceSize);
        FileClose(fp);
    end;
end;

第一次运行肯定是没问题了,但是从第二次开始,我单步调试过,启动时执行fileread后,bw中的数组的值和上次保存的值完全一样,但是窗体执行完creat事件
后就总提示读写内存错误,然后就关闭,不能正常运行。

对于对象的读写,我搞不明白,请大家指教。
我试过用WriteComponentResFile和ReadComponentResFile,不行,程序运行没问题,但是得不到上次退出时保存的数组的值。

------解决方案--------------------
这样直接将对象实例写到文件里恐怕不行,
------解决方案--------------------
对象类型继承自TComponent
用TReader.ReadComponent和TWriter.WriteComponent读写
------解决方案--------------------
去看一下《inside vcl》的第8章,VCL的持久化机制
------解决方案--------------------
ReadComponentResFile / WriteComponentResFile
------解决方案--------------------
sdzeng(大头鸟)说的:

TReader.ReadComponent和TWriter.WriteComponent
------解决方案--------------------
WriteComponent 是操作属性来的
你要自己写保存 处理
------解决方案--------------------
如果 只是 保存 数组 不用类 更方便。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
myrec = record
i: integer;
b: Boolean;
c: TColor;
end;

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
rec_list: array of myrec;
i: integer;

ms: TMemoryStream;
rec: myrec;
begin
SetLength(rec_list, 100);
for i := 0 to high(rec_list) do
begin
rec_list[i].i := i;
rec_list[i].b := i mod 2 = 0;
rec_list[i].c := clRed;
end;
// 测试 数据

ms := TMemoryStream.Create;
i := length(rec_list);
ms.Write(i, sizeof(i));