如何将当前状态的Object保存到文件中?这样它就可以立即被所有变量读取和恢复。
答案 0 :(得分:5)
如前所述,最简单的方法是使用 Stream 及其 WriteComponent 和 ReadComponent 方法。
但是要注意:
- 对于TComponent的后代,它的工作,而不是普通的TObject;
- 只有用于已发布的属性(保存在dfm中的那些),不是公共属性,也不是(更重要的)私有属性;
- 恢复组件时,您必须特别注意名称属性。
您可以在这些SO答案中找到一些可以使用的代码:Replace visual component at runtime in Delphi,Duplicating 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)
您也可以使用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库的一部分,它随附一些组件。