Сохранение TObject в файл

Попробуйте этот путь.

 element(By.xpath("//div[@class='col-sm-8']//input[@value='COST' and @type='radio']")).click();
10
задан 30 March 2009 в 18:47
поделиться

7 ответов

Как уже указано, самый легкий путь состоит в том, чтобы использовать Поток и его методы WriteComponent и ReadComponent.
Но знайте что:
- это работает на потомков TComponent, не простой TObject;
- только для опубликованных свойств (сохраненные в dfm), не общедоступные, ни (тем более) privwte;
- необходимо обратить особое внимание для свойства Name при восстановлении компонента.

Можно найти некоторый код, который Вы могли использовать в них ТАК отвечает: Замените визуальный компонент во времени выполнения в Delphi, Копировав компоненты во Времени выполнения

5
ответ дан 3 December 2019 в 21:23
поделиться

То, что Вы ищете, называют объектным постоянством. Эта статья могла бы помочь, и существуют многие другие, если Вы гуглите для "Дельфи, сохраняющего объекты".

4
ответ дан 3 December 2019 в 21:23
поделиться

Если Вы убываете свой объект от TComponent, можно использовать некоторую встроенную функциональность для потоковой передачи объекта в файл. Я думаю, что это только работает хорошо на простые объекты.

Некоторый пример кода для запущения Вас:

unit Unit1;

interface

uses
  Classes;

type
  TMyClass = class(TComponent)
  private
    FMyInteger: integer;
    FMyBool: boolean;
    FMyString: string;
  public
    procedure ToFile(AFileName: string);
  published
    property MyInteger: integer read FMyInteger write FMyInteger;
    property MyString: string read FMyString write FMyString;
    property MyBool: boolean read FMyBool write FMyBool;
  end;

implementation

{ TMyClass }

procedure TMyClass.ToFile(AFileName: string);
var
  MyStream: TFileStream;
begin
  MyStream := TFileStream.Create(AFileName);
  try
    Mystream.WriteComponent(Self);
  finally
    MyStream.Free;
  end;
end;

end.
4
ответ дан 3 December 2019 в 21:23
поделиться

Существует также самокрутка метод XML здесь на S.O.

2
ответ дан 3 December 2019 в 21:23
поделиться

Здесь существует хорошее учебное руководство. Следует иметь в виду, что у Вас должен быть RTTI (информация о типе выполнения) для сохранения объекта во времени выполнения с помощью этого подхода, таким образом, это только получит опубликованные свойства класса.

1
ответ дан 3 December 2019 в 21:23
поделиться
  1. Очень простое и эффективное решение: Сериализатор классов DragonSoft XML
  2. Также вы можете использовать JVCL TJvAppXMLFileStorage:

    использует JvAppXMLStorage;

     вар
     Хранение: TJvAppXMLFileStorage;
    начать
     Хранение: = TJvAppXMLFileStorage.Create (nil);
     пытаться
     Storage.WritePersistent ('', MyObject);
     Storage.Xml.SaveToFile ( 'S: \ TestFiles \ test.xml');
     Storage.Xml.LoadFromFile ( 'S: \ TestFiles \ test.xml');
     Storage.ReadPersistent ('', MyObject);
     наконец-то
     Storage.Free;
     конец;
    конец;
    
2
ответ дан 3 December 2019 в 21:23
поделиться

Вы уже получили некоторые хорошие ответы на свой вопрос. В зависимости от того, что Вы на самом деле делаете, могло бы быть желательно пользоваться предварительно созданной библиотекой или компонентом для сохранения объектов. Это - недорогой и изящный набор библиотеки/компонента, который делает это тривиальным, чтобы сохранить и восстановить объекты, и довольно легко (т.е. с определенным кодом) размещает сохранение даже неопубликованных членов объекта: http://www.deepsoftware.ru/rsllib/index.html Не что-то, это - аэрокосмические исследования, но если Вы делаете много этого вида вещи этот компонент, служит хорошей основой для него.

Developer Express также включает общую цель cxPropertiesStore компонент как часть библиотеки ExpressEditors, которая идет с некоторыми их компонентами.

-1
ответ дан 3 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: