オブジェクトを現在の状態でファイルに保存するにはどうすればよいですか?そのため、すべての変数を使用してすぐに読み取って復元することができます。TObjectをファイルに保存する
答えて
There is a good tutorial here。このアプローチを使用して実行時にオブジェクトを保存するには、RTTI(実行時の型情報)を持たなければならないことに注意してください。のクラスのプロパティしかキャプチャしません。
S.Oには、ロールオーダーのXML methodもあります。
オブジェクトを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.
既に述べたように、最も簡単な方法は、ストリームとそのWriteComponentとReadComponentメソッドを使用することです。
しかしは意識こと:
は - それはTComponentの、平野ないTObjectの子孫のためにに動作します。
公開されたプロパティ(dfmに保存されたもの)であり、公開されたものでもprivwteものでもないものはのみです。
- には、コンポーネントを復元するときにNameプロパティに特に注意する必要があります。あなたはこれらのSOの答えに使用することができますいくつかのコードを見つけることができ
:Replace visual component at runtime in Delphi、Duplicating components at Run-Time
は、あなたはすでにあなたの質問にいくつかの良い答えを得ています。実際に行っていることに応じて、オブジェクトを保存するためにあらかじめ構築されたライブラリやコンポーネントを使用することが望ましい場合があります。これは安価で気の利いたライブラリ/コンポーネントセットで、オブジェクトの永続化と復元が簡単で、コードのほんの少しで、オブジェクトの未公開メンバーでさえ永続することができます: http://www.deepsoftware.ru/rsllib/index.htmlロケット科学、この種のことをたくさんしているのなら、このコンポーネントは素晴らしいフレームワークを提供します。
Developer Expressには、コンポーネントの一部に付属するExpressEditorsライブラリの一部として汎用cxPropertiesStoreコンポーネントも含まれています。
- 非常にシンプルかつ効率的なソリューション:DragonSoft's XML Class Serializerまた、あなたが使用することができます
JVCL TJvAppXMLFileStorage:
がJvAppXMLStorage を使用しています。
var Storage: TJvAppXMLFileStorage; begin Storage := TJvAppXMLFileStorage.Create(nil); try Storage.WritePersistent('', MyObject); Storage.Xml.SaveToFile('S:\TestFiles\Test.xml'); Storage.Xml.LoadFromFile('S:\TestFiles\Test.xml'); Storage.ReadPersistent('', MyObject); finally Storage.Free; end; end;
- 1. ファイルに保存するSQLPLUS
- 2. ローカルに保存されたxmlファイルを.plistファイルに保存する方法
- 3. std :: chrono :: time_pointを保存してファイルに保存する
- 4. エミュレータにファイルを保存するには?
- 5. ファイルをjavaに保存するには?
- 6. ファイルをアプリケーションバンドルに保存するには
- 7. MongoDBにファイルを保存するには?
- 8. NSMutableDataファイルに保存
- 9. オブジェクトをplistファイルに保存する
- 10. ファイルのパスをリストボックスに保存する
- 11. リストをファイルに保存する
- 12. Androidのファイルにパーセルブルオブジェクトを保存する
- 13. JSでファイルを保存するには?
- 14. SDカードにファイルを保存する
- 15. CGPathをファイルに保存する方法
- 16. ObservableCollectionをファイル(.txt)に保存する
- 17. ファイルをローカルディレクトリに保存する方法
- 18. XAMLファイルをデータベースに保存する
- 19. Sed:ファイルにエラーを保存する
- 20. CSSファイルをWindows Azureに保存する
- 21. AS3データをXMLファイルに保存する
- 22. Eclipseタスクリストをgitファイルに保存する
- 23. テーブルをXMLファイルに保存する
- 24. PHPがXMLをファイルに保存する
- 25. ColdFusionでサーバーにファイルを保存する
- 26. ディスクにXMLファイルを保存する
- 27. WAVファイルをディスクに保存する
- 28. Androidでファイルにintを保存する
- 29. Yii2ファイルをOracle BLOBに保存する
- 30. Java。 Linuxにファイルを保存する
ウィキペディアは言う:「特定のオブジェクトの属性の値のセットは、その状態と呼ばれています。」 Delphiには可視性に関係なくオブジェクトの完全な状態を保存するためのメカニズムが組み込まれておらず、公開されたプロパティのみがサポートされています。 RTTIは、オプションですべてのフィールドIMHOを含むように拡張する必要があります。 – mjn
この状況は更新されていますか? – PSyLoCKe