Programación General > C/C++

 Re: Con listas enlazadas y ficheros

(1/1)

QuieroC:
La cuestion es la siguiente, si yo tengo una lista enlazada con varios campos y su respectivo lazo al siguiente registro de la estructura, como puedo meter los datos de cada registro en un fichero.

Agradeceria que, si ademas de explicarmelo, me facilitarais algun ejemplo practico.

Lo tengo que hacer campo a campo, o tengo que hacer un fwrite(); con la variable de la estructura?

Gracias por atenderme y espero que este foro siga adelante porque es de gran ayuda para mucha gente.

JuanK:
Esto te puede ayudar, pueds ver que no es tan complicado y con este ejemplo ya puedes hacer tu programa, este ejemplo lo que hace es leer un fichero y llevarlo a una estructura, nota que esta diseñado para leer el fichero en grupos de 4 digitos, esto es aleaotio ya que depende de como vayas a hacer tu estructura.
Para efectos de escibir una estructura en un archivo, lo debes hacer parte por parte, poque la estructura como tal es un puntero, asi que si lo guardas en disco, guardaras un numero que no te va a servir para recuperar la informacion.
Debes copiar cada uno de los campos de la estructura al disco, cada uno por aparte, asi mismo los debes recuperar uno por uno y luego depositarlos en la estructura.
 
--- Código: Text --- #include <stdio.h>#include <io.h>#define NOEXF 23#define NOLEN 24#define BUFFI 4 struct Data{  struct Data *Pre,*Post;  int info;}; /*captura datos para un arreglo, desde un archivo  de texto, los convierte en enteros y seguidamente  llena una estructura dinamica.  El archivo debe poseer elformato:  xxxx,xxxx,xxxx,xxxx,   para que la funcion lo pueda entener*/int Lectura(char *FileName,struct Data *Info){  FILE *fp=NULL;  char buff[BUFFI];  int fd,multip=0,buffy;  struct Data *aux;   if((fp=fopen(FileName,"r"))!=NULL)  {    fd=fileno(fp);    multip=filelength(fd);    if(multip%(BUFFI+1)==0)    {      Info->Pre=NULL;      Info->info=0;      Info->Post=NULL;       while(multip>0)      {        fread(buff,sizeof(buff),1,fp);        Info->info=strtol(buff,NULL,10);        aux=(struct Data *)malloc(sizeof(struct Data));        Info->Post=aux;        aux->Pre=Info;        aux->Post=NULL;        Info=aux;        fseek(fp,1,SEEK_CUR);        multip-=(BUFFI+1);      }      free(aux);      free(Info);      fflush(fp);      fclose(fp);      close(fd);    }    else    {      return NOLEN;//Archivo de tama¤o inapropiado no es multiplo de BUFFY+1    }  }  else  {    return NOEXF;//Archivo no existe  }}  
Ojala te sirva

juank

Navegación

[0] Índice de Mensajes

Ir a la versión completa