Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение обьектов классов в файловый поток [D6, D7, Win2k, WinXP]


Ромка ©   (2007-05-11 13:29:00) 

Скажите пожалуйста, как сохранить обьект класса, который включает в себя обьекты инного класса, в файл, используя TFileStream?
Буду признатилен за пример кода.


Ромка   (2007-05-11 14:29:00) [1]

Спасибо 2Novice & 2Kolan.


Kolan   (2007-05-11 14:21:00) [2]

http://rsdn.ru/article/delphi/serialization.xml


Novice   (2007-05-11 14:06:00) [3]

Ну.... например, так:

type TClass1 = class
private
...
protected
...
public
...
property SomeField1 : SomeType read FSomeField1 write SetSomeField1;
property SomeField2 : SomeType read FSomeField2 write SetSomeField2;
...
end;

TClass2 = class
private
...
protected
...
public
...
property SomeProperty : SomeType read FSomeProperty write SetSomeProperty;
property SomeObject : TClass1 read FSomeObject write SetSomeObject;
...
end;

RSaveableHeader = record
Property1 : SomeType;
Property2 : SomeType;
Property3 : SomeType;
end;

procedure TClass2.SaveToFile(FS : TFileName);
var S : TFileStream;
    H : RSaveableHeader;
begin
H.Property1 := SomeProperty;
H.Property2 := SomeObject.Property1;
H.Property2 := SomeObject.Property2;
F := TFileStream.Create('MyFile.mff', fmCreate or fmShareDenyWrite);
F.Write(H, SizeOf(RSaveableHeader));
F.Free;
end;

Писал на коленке и без делфи, поэтому могут быть неточности.

А вообще по идее всем Вашим классам нужно сделать кроме SaveToFile/LoadFromFile еще и SaveToStream(FS : TFileStream)/LoadFromStream(FS : TFileStream);
и когда вызывается процедура сохранения класса-контейнера, в ней создается один экземпляр класса TFileStream, а затем по очереди вызываются методы SaveToStream(FS : TFileStream) у всех дочерних объектов, куда и передается этот экземпляр. А после сохранения дочерних объектов сохраняются поля класса-контейнера. Чтение в той же последовательности.


Наверх

Титульная страница Поиск, карта сайта Написать письмо