Estructuras de datos dinámicas a fichero

Estoy haciendo una aplicación que gestiona diversas estructuras de datos dinámicas. Tengo la clase creada con todos sus métodos de acceso, o sea, leer, insertar, borrar, etc. El problema es que cuando la intento guardar en fichero, al leer da problemas, creo que es que no lee correctamente el numero de datos. Lo hago de la siguiente manera
handle = freefile
open fichero for binary as handle
para escribir:
put #handle, , estructuradinamica()
y para leer:
get #handle, , estructuradinamica()
El problema es que si guardo más datos en el fichero después de la estructura, no los lee bien y la aplicación se cuelga. ¿Alguna idea?

1 Respuesta

Respuesta
1
Yo probaría con
Print #Handle, Estructuradinamica()
Y si eso no te funciona cópiame la parte implicada en el código y la estructura para que sepa que estas manejando y me pueda centrar más en el tema
La estructura viene a ser algo así:
type mitipo
IdItem as string
item as Long
end type
dim EstructuraDinamica() as mitipo
Estoy dudando si no tendré que escribir todos los elementos del vector "a mano", o sea, hacer un Ubound sobre el vector y pasarlos a fichero con un bucle
Desde 1 a Ubound...
Ya de paso, ¿qué diferencia hay entre put y print?
Gracias
Bien tu problema básicamente esta en la manera de abrir el archivo ya que no le indicas el tamaño de la estructura (tendría que se algo así
'Escritura
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, RecordNumber ' Declare variables.
' Open file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
For RecordNumber = 1 To 5 ' Loop 5 times.
MyRecord.ID = RecordNumber ' Define ID.
MyRecord.Name = "My Name" & RecordNumber ' Create a string.
Put #1, RecordNumber, MyRecord ' Write record to file.
Next RecordNumber
Close #1 ' Close file.
'Lectura
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1
Bien en cuanto a el tema de escritura y lectura lo tienes correcto es que ayer me despistaste un poco con la variable me parecido un array en lugar de un tipo de datos (por eso te pedí la aclaración)
En cuanto a la diferencia del put y print es que el put solo lo puedes recuperar con el get con lo que no te puedes traer luego lineas completas pero si estructuras (tu caso) aunque para tu caso tu ejemplo era bsicamente correcto. Salvo la indicación de apertura.
A es importante que a tu string le indiques un espacio ya que si no el numero de bits de tu estructura es variable y por eso el programa se te puede hacer un higo, mira el ejemplo de mi estructura para ver como hacerlo (yo a mi string le indico un tamaño de 20 caracteres)
Ahora sólo falta probarlo en mi aplicación y que funcione!. De todas formas, si tienes curiosidad, echale un vistazo a la info que hay en las msdn sobre el tema: por lo que he leído, cuando salvas una estructura dinámica en fichero, VB guarda primero una especie de cabecera donde pone el tamaño de cada registro, y el número de registros, por eso yo pensaba que no era necesario el bucle. Aunque me parece que en este caso la documentación y la realidad no se corresponden. Muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas