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
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
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
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.
Pero es una lista enlazada
Pero es una lista enlazada guardaria todos los elementos o solo el primero??
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.
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++?
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.