Ir al contenido


Foto

Guardar clases/objetos con punteros en ficheros


  • Por favor identifícate para responder
7 respuestas en este tema

#1 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 30 octubre 2010 - 04:05

Estimados compañeros,

Me enfrento a la problemática de guardar clases/objetos que contienen listas dinámicas como atributos en ficheros. He encontrado pistas en Internet sobre cómo realizar guardados de objetos, pero al contener referencias a memoria la cosa cambia.

Creo que esta pregunta se puede responder de manera genérica para Delphi y no únicamente para FreePascal/Lazarus.

¿Alguna pista o sugerencia sobre cómo almacenar clases/objetos con la información contenida por sus punteros en un fichero?
  • 0

#2 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 31 octubre 2010 - 09:32

Arrojo un poco más de luz, ya que creo que alguien ha debido de resolver este problema para Delphi (no creo que haya diferencia).

En este enlace explica cómo guardar y cargar un objeto desde un fichero:



delphi
  1. var
  2.   Buffer: array[0..10000] of Byte;
  3. begin
  4.   with TFileStream.Create('SomeFile.bin', fmCreate) do
  5.   try
  6.     Seek('Hello');
  7.     Write(Buffer, SizeOf(Buffer));
  8.   finally
  9.     Free;
  10.   end;
  11. end;



El problema es que en mi caso quisiera almacenar también listas dinámicas, y dado que los objetos que voy a guardar contienen punteros a los primeros elementos me gustaría guardar también las listas como si fuesen un atributo más.

Estoy seguro de que alguien se ha tenido que enfrentar a este problema o uno similiar. ¿Alguna pista?
  • 0

#3 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 31 octubre 2010 - 01:38

He seguido indagando y he llegado a las clases TCollection y TCollectionItem, que permiten tener listas (o colecciones) que sean grabadas en un Stream y, por tanto, en un fichero.

Voy a seguir trabajando en esa línea. Supongo que en breves pondré una duda en la sección POO de Delphi, dado que en Java y otros lenguajes en los cuales he programado Orientado a Objetos no se dispone de "property" ni "reads" y "writes".

Un saludo.
  • 0

#4 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 01 noviembre 2010 - 10:05

Ya tengo el asunto encaminado. Estoy creando un pequeño ejemplo de concepto. En cuanto esté listo lo subo para referencia futura.
  • 0

#5 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 05 noviembre 2010 - 05:21

La solución iba más encaminada hacia TList. He realizado un ejemplo y lo he colgado en mi repositorio en GitHub:

https://github.com/l...jectListExample

El código no está del todo pulido, pero como estoy desarrollando otro proyecto no creo que lo mejore.

No hay indicada licencia, pero será de dominio público. Me he basado en la documentación sobre TList por Mark Jhonson.
  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 noviembre 2010 - 07:18

De tener más conocimientos sobre el tema hubiera sido bueno participar en el desde un principio, sin embargo hay que destacar la solución y el ejemplo (y)


Saludos!
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 05 noviembre 2010 - 07:55

Bien bueno amigo, gracias por compartirlo
  • 0

#8 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 05 noviembre 2010 - 08:33

Gracias por compartir karj, interesante tema.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.