レコード型の書き込みと読み込み

試したのはDelphi2009です。recordにメソッドを持たせても問題なくファイルに書き込めるっぽい。

  • test_record.dpr(sjis)
program test_record;

{$APPTYPE CONSOLE}

uses SysUtils, Classes;

type
  TPersonRec = record
    ID: Integer;
    Name: array [0..255] of AnsiChar;
    Age: Integer;
    function ToString: String;
  end;

function TPersonRec.ToString: String;
begin
  Result := Format('ID: %d, Name: %s, Age: %d', [ID, Name, Age]);
end;

var
  person1, person2: TPersonRec;
  fs: TFileStream;
begin
  person1.ID := 1;
  person1.Name := 'テスト';
  person1.Age := 17;

  WriteLn(person1.ToString);

  fs := TFileStream.Create('test.dat', fmCreate);
  try
    fs.Write(person1, SizeOf(TPersonRec));
  finally
    fs.Free;
  end;

  fs := TFileStream.Create('test.dat', fmOpenRead);
  try
    fs.Read(person2, SizeOf(TPersonRec));
  finally
    fs.Free;
  end;

  WriteLn(person2.ToString);
end.

実行結果

>dcc32 test_record.dpr
CodeGear Delphi for Win32 コンパイラ version 20.0
Copyright (c) 1983,2008 CodeGear
test_record.dpr(46)
47 行, 0.08 秒, コード 76472 バイト, データ 23820 バイト
>test_record
ID: 1, Name: テスト, Age: 17
ID: 1, Name: テスト, Age: 17