我自定义了一个类: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,不行,程序运行没问题,但是得不到上次退出时保存的数组的值。
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,不行,程序运行没问题,但是得不到上次退出时保存的数组的值。
解决方案 »
- 为什么我用Delphi的dbgrid显示ACCESS的数据时候,数据没有按顺序显示?
- 打印panel中的内容(包括image、memo)丢图了,十万火急
- 广州深圳北京上海,DELPHI地区交友群强势成力,欢迎各位朋友加入!
- 如何设置一个dxDBGrid 的合计栏,请有使用过该控件的兄弟来拉我一把
- 再次求助。。。。。如何锁定access中的表,及如何解除锁定????
- 怎样取得一个汉字的五笔字型编码?
- 关于listview的问题
- q请教一个三层结构问题,用clintsocket连接服务端程序,并想取得函数
- 请问用delphi怎样实现这个???
- 我欲查询数据库,然后选择查询到的数据进行修改,不过Tquery的CanModify的属性~~~
- 已知一条线(x1,y1) (x2,y2) ,求经过(x1,y1)的垂直线
- 想在Form上画一个虚框,不知道如何实现!!!
用TReader.ReadComponent和TWriter.WriteComponent读写
你要自己写保存 处理
unit Unit1;interfaceuses
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));
ms.Write(rec_list[0], i * sizeof(rec));
ms.SaveToFile('c:\1.dat');
FreeAndNil(ms);
//保存 SetLength(rec_list, 0); ms := TMemoryStream.Create;
ms.LoadFromFile('c:\1.dat');
ms.Position := 0;
ms.Read(i, sizeof(i));
SetLength(rec_list, i);
ms.Read(rec_list[0], i * sizeof(rec));
FreeAndNil(ms);
//读取 SetLength(rec_list, 0);
end;end.
给个连接
Create your own Database using Delphi's "File Of" Typed Files
http://delphi.about.com/od/fileio/a/fileof_delphi.htm