Советы по 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 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;

[000248]



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