![]() |
|
#1
|
||||
|
||||
![]() Искал не нашел, как сохранить TList в файл?
|
#2
|
||||
|
||||
![]() Он для других целей предназначен. Представь у тебя список объектов загружен а ты их в файл.
|
#3
|
||||
|
||||
![]() плохо, мне как раз в такой форме работать хорошо с ним,
приходится работать со TStringList'ами данные в которых держу через разделители Цитата:
|
#4
|
|||
|
|||
![]() Надо:
1. Написать классы для твоих данных, содержащие кроме того методы SaveToStream и LoadFromStream (по названиям понятно, что они должны делать?) 2. Перейти от TList к TObjectList. 3. Соответсвенно, для сохранения создать файловый поток, а потом у всех объектов в списке вызвать соотв. метод. С загрузкой сложнее, если объекты разнотипные, то надо будет делвть фабрику и дорабатывать сохранение, что бы сначала писался признак класса объекта, а потом сами данные. |
#5
|
||||
|
||||
![]() lmikle что то вроде этого?
Код:
procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; pl: PMyList; l: Integer; s: String; b: Boolean; begin if OpenDialog1.Execute then begin FormDestroy (Sender); fs := TFileStream.Create (OpenDialog1.FileName, fmOpenRead); while fs.Position < fs.Size do begin fs.ReadBuffer (l, SizeOf(l)); SetLength (s, l); fs.ReadBuffer (Pointer(s)^, l); fs.ReadBuffer (b, SizeOf(b)); New (pl); pl.obj := s; pl.buffer := b; if List = nil then begin pl.rnext := nil; pl.lnext := nil; pl.root := pl; end else begin pl.rnext := nil; pl.lnext := List; pl.root := List.root; List.rnext := pl; end; List := pl; end; fs.Free; LoadListToForm; end; end; procedure TForm1.Button3Click(Sender: TObject); var fs: TFileStream; pl: PMyList; l: Integer; s: String; b: Boolean; begin if SaveDialog1.Execute then begin fs := TFileStream.Create (SaveDialog1.FileName, fmCreate); pl := List.root; while pl <> nil do begin s := pl.obj; l := Length (s); b := pl.buffer; fs.WriteBuffer (l, SizeOf(l)); fs.WriteBuffer (Pointer(s)^, l); fs.WriteBuffer (b, SizeOf(b)); pl := pl.rnext; end; fs.Free; end; end; |
#6
|
||||
|
||||
![]() Имелось в виду, НАПИСАТЬ свои классы от существующих.
|
#7
|
||||
|
||||
![]() Да нет, нарыл подобный пример, может сделаю так же
|
#8
|
||||
|
||||
![]() Код:
procedure SaveListToFile(const AFileName: String; const AList: TList); var AFileStream: TFileStream; i: Integer; n: DWORD; begin AFileStream:=TFileStream.Create(AFileName, fmCreate); try for i:=0 to AList.Count-1 do begin n:=DWORD(AList[i]); AFileStream.WriteBuffer(n, SizeOf(n)); end; finally AFileStream.Free; end; end; использование: Код:
var AList: TList; begin AList:=TList.Create; try AList.Add(Pointer(8)); AList.Add(Pointer(7)); AList.Add(Pointer(2011)); SaveListToFile('d:\Downloads\AList.txt', AList); finally AList.Free; end; end; Пишу программы за еду. __________________ |
#9
|
||||
|
||||
![]() Сериализация, парень, сериализация.
У твоего объекта должны быть три метода: первый - это ассайн, второй и третий для обеспечения сериализации. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |