Anuncios Google

Guardar lista enlazada simple a un fichero y luego recuperarala

Mi pregunta es como puedo guardar una lista enlazada a un fichero y luego poder volver a usarla cuando el programa se ejecute otra vez

y luego otra pero tampoco es tan importante es como puedo guardar solo los elementos que yo quiera

Gracias por adelantado



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Guardando uno a uno todos sus elementos.

Lo más sencillo es que al principio del archivo escribas el tamaño de la lista (número de elementos) y luego recorras la lista escribiendo el valor de cada celda (sin escribir el puntero obviamente). También se puede hacer sin escribir el número de elementos, pero lo más fácil es que lo hagas así.

Saludos


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de pipagerardo

Puede ser tema de casting.

Prueba esto a ver si funciona:

 

En C:   fwrite( (char *)&agenda, sizeof(struct _agenda), 1, fichero );

En C++: fwrite( reinterpret_cast<char *>(&agenda), sizeof(struct _agenda), 1, fichero );

 

Lo he probado y funciona.

 

Imagen de anxoganso

Pero es una lista enlazada

Pero es una lista enlazada guardaria todos los elementos o solo el primero??

Imagen de pipagerardo

Listas enlazadas.

fwrite( (char *)&agenda, sizeof(struct _agenda), 1, fichero );

Esto solo guarda el primer registro.

Luego debes recorrer los siguientes registros usando punteros y guardarlos.

Con fwrite solo se pueden guardar datos que esten consecutivos en memoria, y las listas enlazadas no lo están.

Imagen de pipagerardo

Código

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct _agenda
{
    char nombre[20];
    char apellido1[20];
    char apellido2[20];
    char telefono[12];
    char movil[12];
    char email[30];
    struct _agenda *siguiente;
 
}agenda;

int main(int argc, char *argv[])
{

  strcpy( agenda.nombre, "Gerardo" );
  strcpy( agenda.apellido1, "Gerardo" );
  strcpy( agenda.apellido2, "Gerardo" );
  strcpy( agenda.telefono, "Gerardo" );
  strcpy( agenda.movil, "Gerardo" );
  strcpy( agenda.email, "Gerardo" );
 
  FILE *fichero;
  fichero = fopen( "contactos.txt", "a" );
 
  // fwrite( reinterpret_cast<char *>(&agenda), sizeof(struct _agenda), 1, fichero );
  fwrite( (char *)&agenda, sizeof(struct _agenda), 1, fichero );

  fclose( fichero );
 
  system("PAUSE"); 
  return 0;
}

Simplemente escribes su valor

Simplemente escribes su valor en el fichero... Usas C o C++?

Imagen de anxoganso

C y no soy capaz intente

C y no soy capaz intente hacer esto:

 

int guardar()

{

    FILE *fichero;

    fichero = fopen("contactos.txt", "a");

    fwrite(&agenda, sizeof(struct _agenda), 1, fichero );

    return 0;

}

 

 

pero al ejecutarlo me da error y se crea el fichero pero con todo null

la estructura es esta:

struct _agenda

{

    char nombre[20];

    char apellido1[20];

    char apellido2[20];

    char telefono[12];

    char movil[12];

    char email[30];

    struct _agenda *siguiente;

}agenda;


No has cerrado el

No has cerrado el fichero.

 

Por otro lado tampoco has inicializado la estructura.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.