試したのは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