¿Cómo se puede guardar un Objeto, en su estado actual, en un archivo? Para que pueda leerse y restaurarse inmediatamente con todas sus variables.Guardar un TObject en un archivo
Respuesta
Lo que está buscando se llama persistencia del objeto. Este article podría ayudar, y hay muchos otros si busca en google "objetos persistentes delphi".
Probablemente el hombre usó Google que lo apuntó a Stackoverflow. "Preguntar a Google" no es una respuesta real. La respuesta de Francois en su lugar es una respuesta REAL (y útil). – Ampere
There is a good tutorial here. Tenga en cuenta que debe tener RTTI (información de tipo de tiempo de ejecución) para guardar un objeto en tiempo de ejecución utilizando este enfoque, por lo que solo capturará propiedades publicadas de una clase.
También hay un rollo propio XML method aquí en S.O.
Si desciende su objeto desde TComponent, puede usar algunas funciones incorporadas para transmitir el objeto a un archivo. Creo que esto solo funciona bien para objetos simples.
un código de ejemplo para ayudarle a empezar:
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.
Como ya se ha dicho, la manera más fácil es usar un corriente y su WriteComponent y ReadComponent métodos.
Pero ser conscientes de que:
- funciona para los descendientes de TComponent, TObject no llanura;
- solo para las propiedades publicadas (las guardadas en dfm), no las públicas ni (a fortiori) las privilegiadas;
- tiene que preste especial atención a la propiedad Nombre al restaurar el componente.
Usted puede encontrar algo de código se puede utilizar en estas respuestas SO: Replace visual component at runtime in Delphi, Duplicating components at Run-Time
si ya recibió algunas buenas respuestas a su pregunta. Dependiendo de lo que realmente esté haciendo, podría ser conveniente usar una biblioteca o componente preconstruido para guardar objetos. Este es un conjunto de biblioteca/componentes económico e ingenioso que hace que resulte trivial conservar y restaurar objetos, y con bastante facilidad (es decir, con un poco de código) acomoda miembros persistentes e inéditos de un objeto: http://www.deepsoftware.ru/rsllib/index.html No es algo que sea una ciencia revolucionaria. pero si estás haciendo mucho de este tipo de cosas, este componente proporciona un buen marco para ello.
Developer Express también incluye un componente de propósito general cxPropertiesStore como parte de la biblioteca de ExpressEditors que viene con algunos de sus componentes.
- muy simple y eficiente solución: DragonSoft's XML Class Serializer
También puede utilizar JVCL TJvAppXMLFileStorage:
utiliza 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. Cómo guardar un archivo png con transparencia?
- 2. Guardar un archivo temporal
- 3. ¿Guardar un NSView en un archivo png?
- 4. Guardar salida de un archivo php en un archivo html
- 5. Func <TObject, bool> o Predicate <TObject>?
- 6. Uso heredado en el constructor "Crear" de un objeto TObject
- 7. Java: Guardar StreamResult en un archivo
- 8. ¿Guardar CGImageRef en un archivo png?
- 9. Elisp: cómo guardar datos en un archivo?
- 10. Guardar un archivo usando libcurl en C
- 11. Guardar certificado X509 en un archivo
- 12. Cómo guardar un objeto en un archivo en Delphi
- 13. ¿Cómo puedo guardar un objeto en un archivo?
- 14. Delphi 2010: ¿Cómo guardar un registro completo en un archivo?
- 15. ¿Cómo guardar un archivo XML en un disco con python?
- 16. Cómo guardar un Objeto QPixmap en un archivo?
- 17. android cómo guardar un objeto en un archivo?
- 18. C# - Guardar un DataGridView en un archivo y cargarlo
- 19. Generar y guardar un archivo PDF
- 20. ¿Computing Hash al guardar un archivo?
- 21. Guardar un archivo y crear directorios automáticamente
- 22. carpeta asociada al guardar un archivo html
- 23. ¿Dividir o guardar un subconjunto de un archivo ESRI Shape SHP en un nuevo archivo?
- 24. lanzan TObject usando su ClassType?
- 25. Cómo guardar un hash en un CSV
- 26. Cómo guardar un NSImage como un nuevo archivo
- 27. guardar un objeto BufferedImage a Amazon S3 como un archivo
- 28. Guardar un marco de datos como un archivo binario
- 29. ¿Cómo debo guardar un archivo en OpenOffice para que no sea un archivo binario en Subversion?
- 30. ¿Cómo guardar backbuffer en un archivo en DirectX 10?
Wikipedia dice: "El conjunto de valores de los atributos de un objeto en particular se llama su estado." Delphi en realidad no tiene un mecanismo incorporado para guardar el estado completo del objeto, independientemente de la visibilidad, solo se admiten las propiedades publicadas. RTTI debe ampliarse para incluir opcionalmente todos los campos en mi humilde opinión. – mjn
¿Se ha actualizado esta situación? – PSyLoCKe