11

オブジェクトを現在の状態でファイルに保存するにはどうすればよいですか?そのため、すべての変数を使用してすぐに読み取り、復元できます。

4

7 に答える 7

5

既に述べたように、最も簡単な方法はStreamとそのWriteComponentおよびReadComponentメソッドを使用することです。
ただし、次の点に注意してください。
-プレーンな TObject ではなく、 TComponent の子孫に対して機能します。
-公開されたプロパティ(dfm に保存されたもの) のみであり、公開されているものや (場合によっては) プライベートなものではありません。
-コンポーネントを復元するときは、Name プロパティに特に注意する必要があります。

これらの SO 回答で使用できるコードを見つけることができます: Delphi で実行時にビジュアル コンポーネントを置き換える 、実行時にコンポーネントを複製する

于 2009-03-30T19:57:54.213 に答える
4

あなたが探しているのは、オブジェクトの永続性と呼ばれます。この記事が役立つかもしれません。また、「デルファイの永続化オブジェクト」をグーグルで検索すると、他にも多くの記事があります。

于 2009-03-30T18:54:53.397 に答える
4

オブジェクトを 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.
于 2009-03-30T19:28:03.347 に答える
2

SO には独自のXML メソッドもあります

于 2009-03-30T19:05:18.833 に答える
2
  1. 非常にシンプルで効率的なソリューション: DragonSoft の XML クラス シリアライザー
  2. また、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;
    
于 2009-04-13T12:10:19.680 に答える
1

ここに良いチュートリアルがあります。このアプローチを使用して実行時にオブジェクトを保存するには、RTTI (実行時の型情報) が必要であるため、公開されたクラスのプロパティのみがキャプチャされることに注意してください。

于 2009-03-30T19:04:03.280 に答える
-1

あなたの質問に対しては、すでにいくつかの適切な回答が得られています。実際に行っていることによっては、事前に構築されたライブラリまたはコンポーネントを使用してオブジェクトを保存することが望ましい場合があります。これは安価で気の利いたライブラリ/コンポーネント セットであり、オブジェクトの永続化と復元を簡単にし、非常に簡単に (つまり、少しのコードで) オブジェクトの未公開メンバーの永続化にも対応します: http://www.deepsoftware. ru/rsllib/index.html ロケット科学のようなものではありませんが、この種のことをたくさん行っている場合、このコンポーネントは優れたフレームワークを提供します。

Developer Express には、一部のコンポーネントに付属する ExpressEditors ライブラリの一部として、汎用の cxPropertiesStore コンポーネントも含まれています。

于 2009-03-30T22:50:37.543 に答える