delphi 记录类型保存为二进制文件

unit Unit1;

interface

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

type
  TMyRec = record     //定义Record
    Name: string[10];
    Sex: string[8];
    Age: integer;
  end;

  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    procedure WriteRec(NewRec: TMyRec; RecFileName: string);
    procedure ReadRec(GetRec: TMyRec; RecFileName: string; Num: Integer);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  MyRec: TMyRec;
  lv_sFileName: string;
begin
  MyRec.Name := '张三';
  MyRec.Sex := '男';
  MyRec.Age := 18;

  lv_sFileName := 'C:\MyRec.dat';  //二进制文件
  WriteRec(MyRec, lv_sFileName);

  //读取第1条记录
  ReadRec(MyRec, lv_sFileName, 1);
end;

//写记录
procedure TForm1.WriteRec(NewRec: TMyRec; RecFileName: string);
var
  F: file of TMyRec;
  RecCount: integer;    //Rec数量
begin
  AssignFile(F, RecFileName);
  if FileExists(RecFileName) <> True then   //判断文件是否存在
  begin
    Rewrite(F);                             //不存在则新增文件
    Write(F, NewRec);
  end
  else
  begin
    FileMode := 1;                         //设置成WriteOnly模式
    Reset(F);                              //存在则添加Rec入文件
    RecCount := FileSize(F);               //取Rec数量
    Seek(F, RecCount);                     //设置Pointer位置
    Write(F, NewRec);
  end;
  CloseFile(F);                            //关闭文件
end;

//读取记录
procedure TForm1.ReadRec(GetRec: TMyRec; RecFileName: string; Num: Integer);
var
  F: file of TMyRec;
  RecCount: Integer;    //读取第几条记录
  RecMax: integer;     //Rec的最大值
begin
  RecCount := Num - 1;       //用户要提取第一个就输入1,类推
  AssignFile(F, RecFileName);
  if FileExists(RecFileName) <> True then
    exit;
  FileMode := 0;
  Reset(F);
  RecMax := FileSize(F);
  if RecCount > RecMax - 1 then
    Exit;                   //超过Rec最大值则跳出
  Seek(F, RecCount);        //设置读取Rec的Pointer位置
  Read(F, GetRec);
  Showmessage('记录' + IntToStr(Num) + ':【' + GetRec.Name + ':' + InttoStr(GetRec.Age) + '】');
end;

end.
 

猜你喜欢

转载自blog.csdn.net/qq_39951605/article/details/82531895
今日推荐