Советы по Delphi

       

Сохранение и чтение из потока данных объекта


Для чтения и записи на диск большого количества записей данных объекта я использовал 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 dobeginApplication.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 dobeginNameRecord := 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;

[000248]



Содержание раздела