将TObject保存到文件

时间:2009-03-30 18:47:04

标签: delphi object save delphi-7

如何将当前状态的Object保存到文件中?这样它就可以立即被所有变量读取和恢复。

7 个答案:

答案 0 :(得分:5)

如前所述,最简单的方法是使用 Stream 及其 WriteComponent ReadComponent 方法。
但是要注意: - 对于TComponent的后代,它的工作,而不是普通的TObject;
- 只有用于已发布的属性(保存在dfm中的那些),不是公共属性,也不是(更重要的)私有属性;
- 恢复组件时,您必须特别注意名称属性

您可以在这些SO答案中找到一些可以使用的代码:Replace visual component at runtime in DelphiDuplicating components at Run-Time

答案 1 :(得分:4)

您正在寻找的是被称为对象持久性。这个article可能有所帮助,如果你谷歌搜索“delphi持久对象”,还有很多其他的。

答案 2 :(得分: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.

答案 3 :(得分:2)

在S.O。

上也有自己的XML method

答案 4 :(得分:2)

  1. 非常简单有效的解决方案:DragonSoft's XML Class Serializer
  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;
    

答案 5 :(得分:1)

There is a good tutorial here。请记住,您必须使用此方法在运行时使用RTTI(运行时类型信息)保存对象,因此它只会捕获类的已发布属性。

答案 6 :(得分:-1)

你已经对你的问题得到了一些好的答案。根据您实际执行的操作,可能需要使用预先构建的库或组件来保存对象。这是一个廉价且漂亮的库/组件集,它使得持久化和恢复对象变得微不足道,并且非常容易(即,只需要一点代码)就可以容纳持久的甚至未发布的对象成员: http://www.deepsoftware.ru/rsllib/index.html这不是火箭科学的东西,但如果你做了很多这样的事情,这个组件为它提供了一个很好的框架。

Developer Express还包含一个通用的cxPropertiesStore组件,作为ExpressEditors库的一部分,它随附一些组件。