![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение обьектов классов в файловый поток [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) у всех дочерних объектов, куда и передается этот экземпляр. А после сохранения дочерних объектов сохраняются поля класса-контейнера. Чтение в той же последовательности.