如何在有类型文件中添加数据(急用) (20分)

来源:百度文库 编辑:神马文学网 时间:2024/06/03 12:41:28
话题259803的标题是: 如何在有类型文件中添加数据(急用) (20分)
分类:数据库-文件型 zlx05 (2000-06-04 15:12:00)

我在编制一个程序,定义了一个结构文件,需要不断地添加数据,但我不能实现,基本结构如下:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
   tdata=record
    name:string[10];
    num:integer;
    end;
    tfile=file of tdata;
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Panel2: TPanel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  {  function form1.getdata: tdata;}
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:tfile;
  implementation

{$R *.DFM}
function getdata:tdata;
begin
try
with result do begin
name:=form1.edit1.text;
num:=strtoint(form1.edit2.text)
end
except
showmessage('error');abort
end
end;
procedure setdata(const data:tdata);
begin
with data do begin
form1.edit1.text:=name;
form1.edit2.text:=inttostr(num);
end
end;
procedure TForm1.Button1Click(Sender: TObject);
var
adata:tdata;
begin
if button1.caption='add' then begin
panel2.Visible:=false;
button1.caption:='save';
end
else begin
adata:=getdata;
assignfile(f,'f:\zlx\delphi\lucky\lucky.dat');
rewrite(f);      {用这句会将原文件覆盖,在文件中只有一个数据,请问应如何解决}
write(f,adata);
edit1.text:='';
edit2.text:='';
button1.caption:='add';
panel2.visible:=true;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
adata:tdata;
begin
panel2.visible:=false;
assignfile(f,'f:\zlx\delphi\lucky\lucky.dat');
reset(f);
read(f,adata);
setdata(adata);
end;

end.

sanrex (2000-06-04 16:37:00)

把rewrite改为 append 如何?
可在帮助中输入 Append procedure获得具体信息

sanrex (2000-06-04 16:43:00)

assignfile 后可以有3种方法 rewrite,append,reset ,区别如下

------------------
rewrite 删除内容后从新写
append  在尾部添加
reset   重置,文件已经开了就关掉它在打开

cch_b (2000-06-04 17:12:00)

啊,有类型文件只要用RESET就行了,它不像文本文件,只要用
那个就可以读、写、SEEK,放心地干吧

Victortim (2000-06-04 17:14:00)

reset   重置方式打开文件,你可以用
  procedure Seek(var F; N: Longint);

定位到文件的任何地方重写或追加.
我认为此方式最好用.

Kang (2000-06-04 21:00:00)

append只能用于文本文件
想添加,这样做:
  AssignFile(f,Filename);
  if FileExists(Filename) then Reset(f)
  else Rewrite(f);
  try
     Seek(f,FileSize(f));
     ....//添加数据
  finally
     CloseFile(f);
  end;

wjiachun (2000-09-21 5:56:00)

接受答案了.

Kang的回答最终被接受。