如何将当前状态下的对象保存到文件中?这样就可以立即读取并恢复其所有变量。
7 回答
As already stated, the easiest way is to use a Stream and its WriteComponent and ReadComponent methods.
But be aware that :
- it works for descendants of TComponent, not plain TObject;
- only for the published properties (those saved in a dfm), not the public ones nor (a fortiori) the privwte ones;
- you have to pay a special attention for the Name property when restoring the component.
You may find some code you could use in these SO answers: Replace visual component at runtime in Delphi, Duplicating components at Run-Time
如果你从 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.
您正在寻找的是所谓的对象持久性。这篇文章可能会有所帮助,如果您在谷歌上搜索“delphi 持久对象”,还有很多其他文章。
在 SO上还有一个自己滚动的XML 方法
- 非常简单高效的解决方案:DragonSoft 的 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;
这里有一个很好的教程。请记住,您必须拥有 RTTI(运行时类型信息)才能使用此方法在运行时保存对象,因此它只会捕获类的已发布属性。
你的问题已经得到了一些很好的答案。根据您实际执行的操作,可能需要使用预构建的库或组件来保存对象。这是一个便宜且漂亮的库/组件集,它使得持久化和恢复对象变得微不足道,并且非常容易(即,使用一点代码)适应持久化甚至对象的未发布成员: http://www.deepsoftware。 ru/rsllib/index.html 不是什么火箭科学,但是如果你做很多这类事情,这个组件会为它提供一个很好的框架。
Developer Express 还包括一个通用的 cxPropertiesStore 组件,作为 ExpressEditors 库的一部分,该库随一些组件一起提供。