powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus - сохранение в файл экземпляра класса
18 сообщений из 18, страница 1 из 1
Lazarus - сохранение в файл экземпляра класса
    #39460838
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перерыл весь интернет, но так и не нашёл рабочего кода, который сохранит мой экземпляр (а точнее массив экземпляров) в файл.
Изначально пытался делать через типизированные файлы, но программа в этом случае сохраняет только указатель на экземпляр и после завершения программы всё теряется.

Как я понял, чтобы сохранение происходило корректно, неоходимо объект сериализовать. Но вот как это сделать? Есть всякие потоки типа TMemoryStream, TFileStream для наследников TComponent, но я так и не понял как с ними возиться. Повторюсь, мне нужно сохранение массива

Помогите!!!
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460841
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460842
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg,
Перебери элементы массива в цикле.

Правда, гениально? :)
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460843
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

не туда "тынц". А вот сюда
http://www.delphimaster.ru/articles/collections.html

https://habrahabr.ru/sandbox/23800/

а еще лучше - вот это
https://rsdn.org/article/delphi/serialization.xml
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460845
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, эти статьи я уже прочёл, но рабочего ответа на свою проблему я так и не нашёл...
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460846
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, читайте, пожалуйста, внимательно, что я спросил. Я спросил совсем другое.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460847
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД,

И правда гениально, как я сам то не додумался=)
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460852
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПерерыл весь интернет, но так и не нашёл рабочего кода, который сохранит мой экземпляр (а точнее массив экземпляров) в файл.
Изначально пытался делать через типизированные файлы, но программа в этом случае сохраняет только указатель на экземпляр и после завершения программы всё теряется.

Как я понял, чтобы сохранение происходило корректно, неоходимо объект сериализовать. Но вот как это сделать? Есть всякие потоки типа TMemoryStream, TFileStream для наследников TComponent, но я так и не понял как с ними возиться. Повторюсь, мне нужно сохранение массива

Помогите!!!

TCollection умеет сериализоваться из коробки, мало чем отличаясь от массива.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460856
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
schi,

Ну фишка не в том, что нужна сериализация массива, у меня в принципе объекты не сохраняются. Мне бы хотябы один объект сохранить, а потом уже, разумеется, массив.

Есть что почитать про TCollection?
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460861
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegschi,

Ну фишка не в том, что нужна сериализация массива, у меня в принципе объекты не сохраняются. Мне бы хотябы один объект сохранить, а потом уже, разумеется, массив.

Есть что почитать про TCollection?
Тебе кучу ссылок на статьи о сериализации объектов дали.
Ты утверждаешь, что читал их, но не помогло. Читай снова. До просветления.

А про коллекции все написано в спавке Дельфи и практически в любой книге по Дельфи.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460867
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД,

Давай без трольства и агрессии, пожалуйста.

Этот код, который просто везде мне суют под нос, работает очень странно.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
procedure LoadComponentFromTextFile(Component: TComponent; const FileName: string); 
var 
  ms: TMemoryStream; 
  fs: TFileStream; 
begin 
  fs := TFileStream.Create(FileName, fmOpenRead); 
  ms := TMemoryStream.Create; 
  try 
    ObjectTextToBinary(fs, ms); 
    ms.position := 0; 
    ms.ReadComponent(Component); 
  finally 
    ms.Free; 
    fs.free; 
  end; 
end; 
 
//...процедура сохраняет компонент в текстовый файл 
procedure SaveComponentToTextFile(Component: TComponent; const FileName: string); 
var 
  ms: TMemoryStream; 
  fs: TFileStream; 
begin 
  fs := TFileStream.Create(FileName, fmCreate or fmOpenWrite); 
  ms := TMemoryStream.Create; 
  try 
    ms.WriteComponent(Component); 
    ms.position := 0; 
    ObjectBinaryToText(ms, fs); 
  finally 
    ms.Free; 
    fs.free; 
  end; 
end;



Объект класса player он сохраняет вот в таком виде:
Код: plaintext
1.
object player
end
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460868
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПовторюсь, мне нужно сохранение массива
Что просили, то я и нашёл
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460869
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegОбъект класса player он сохраняет вот в таком виде:
Код: plaintext
1.
object player
end

Хотелось бы увидеть класс Player. Мой волшебный шар предсказывает что в нет нет PUSBLISHED свойств
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460873
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr... волшебный шар предсказывает что в нет нет PUSBLISHED свойств
Такого не может быть: он читал статьи.

"- Чытав? - Чытав!" - (с).
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460875
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg,

начиная c Дельфи 2010 есть сериализация в JSON. В последних версиях вроде даже почти "искаропки" сохранение. К Delphi 2010 можно было бесплатно скачать книжку Марко Канту Delphi 2010 handbook, где это подробно описывалось, но я подозреваю, что в более поздних версиях, даже не самых последних, это могло стать ещё проще.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460878
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62, не заметил, что речь не про Дельфи, а про Лазарус.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460882
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegно рабочего ответа на свою проблему я так и не нашёл...
тогда вопрос - работает-ли все это в Лазарусе так, как в Дельфи.
Я писал код по примеру третьей статьи в своем списке, еще на Дельфи 2007. У меня код такой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure SaveToFile(RootObject: TComponent; const FileName: TFileName);
var
  FileStream: TFileStream;
  MemStream: TMemoryStream;
const
  FileHeader : string[11] = 'IBA2DATA'+#13#10;
begin
  FileStream := TFileStream.Create(FileName, fmCreate);
  FileStream.Write(FileHeader[1], 10);
  MemStream := TMemoryStream.Create;
  try
    MemStream.WriteComponent(RootObject);
    MemStream.Position := 0;
    ObjectBinaryToText(MemStream, FileStream);
  finally
    MemStream.Free;
    FileStream.Free;
  end;
end;



В модулях всем объектам, которые предполагаются к сохранении, написано RegisterClass. Все работает. Сохраняет в подобие xml, читает тоже оттуда без проблем.
...
Рейтинг: 0 / 0
Lazarus - сохранение в файл экземпляра класса
    #39460893
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegЭтот код, который просто везде мне суют под нос, работает очень странно.
дело не в этом коде, а в том, зарегистрированы ли нужные компоненты через RegisterComponent, и как прописаны сохраняемые свойства у этих компонент.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus - сохранение в файл экземпляра класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]