Для чтения и записи на диск большого количества записей данных
объекта я использовал TFileStream и TMemoryStream. Ниже я привел пример,
сохраняющий на диске c помощью потока содержание контейнера DataArray,
насчитывающего несколько тысяч записей объектов:
DataStream := TFileStream.Create('vccmem.dat', fmCreate);
MakeDate := FormatDateTime('mmmm d, yyyy',date);
DataStream.Write(MakeDate, SizeOf(MakeDate));
RCount := DataArray.Size;
DataStream.Write(RCount,SizeOf(RCount));
for q := 1 to DataArray.Size do
begin
Application.ProcessMessages;
ARecord := DataArray[q] as TNameRecord;
DataStream.Write(ARecord.id, SizeOf(ARecord.id));
DataStream.Write(ARecord.first_name, SizeOf(ARecord.first_name));
DataStream.Write(ARecord.last_name, SizeOf(ARecord.last_name));
DataStream.Write(ARecord.title, SizeOf(ARecord.title));
DataStream.Write(ARecord.address, SizeOf(ARecord.address));
DataStream.Write(ARecord.city, SizeOf(ARecord.city));
DataStream.Write(ARecord.state, SizeOf(ARecord.state));
DataStream.Write(ARecord.zip, SizeOf(ARecord.zip));
DataStream.Write(ARecord.phone, SizeOf(ARecord.phone));
DataStream.Write(ARecord.fax, SizeOf(ARecord.fax));
DataStream.Write(ARecord.e_mail, SizeOf(ARecord.e_mail));
end;
DataStream.Destroy;
|
А вот код, но на этот раз загружающий данные в память при запуске приложения
и создающие контейнер данных с именем NameArray:
DataStream := TMemoryStream.Create;
DataStream.LoadFromFile('vccmem.dat');
DataStream.Read(MakeDate, SizeOf(MakeDate));
DataStream.Read(RCount, SizeOf(RCount));
for q := 1 to RCount do
begin
NameRecord := TNameRecord.Create;
DataStream.Read(NameRecord.id, SizeOf(NameRecord.id));
DataStream.Read(NameRecord.first_name,
SizeOf(NameRecord.first_name));
DataStream.Read(NameRecord.last_name,
SizeOf(NameRecord.last_name));
DataStream.Read(NameRecord.title, SizeOf(NameRecord.title));
DataStream.Read(NameRecord.address, SizeOf(NameRecord.address));
DataStream.Read(NameRecord.city, SizeOf(NameRecord.city));
DataStream.Read(NameRecord.state, SizeOf(NameRecord.state));
DataStream.Read(NameRecord.zip, SizeOf(NameRecord.zip));
DataStream.Read(NameRecord.phone, SizeOf(NameRecord.phone));
DataStream.Read(NameRecord.fax, SizeOf(NameRecord.fax));
DataStream.Read(NameRecord.e_mail, SizeOf(NameRecord.e_mail));
NameArray.Insert(NameRecord);
end;
|
|