Programación General > C/C++

 archivos

(1/1)

faio:
me falta la parte de archivos que no funciona, hace tiempo que no programo en c y olvide algunas cosas


--- Código: C ---  typedef struct nodoagenda{        int dni;        char nombre[15];        char apellidos[25];        char direccion[30];        struct nodoagenda *ant;        struct nodoagenda *sig;        }nodoagenda;         void CrearAgenda(nodoagenda *(&)); int AgendaVacia(nodoagenda *); int AgendaLlena(nodoagenda *); int EstaElementoAgenda(nodoagenda *,int); void InsertarAgenda(nodoagenda *(&)); void EliminarElementoAgenda(nodoagenda *(&)); void MostrarInversoAgenda(nodoagenda *); void BorrarAgenda(nodoagenda *(&)); void GuardarAgenda(nodoagenda *); void LeerAgenda(nodoagenda *listad);   //void CrearAgenda(nodoagenda *(&listad)){     listad = NULL;}/*****************************************************************************************/int AgendaVacia(nodoagenda *listad){    int dev = 0;        if (listad==NULL)       dev = -1;        return dev;}/*****************************************************************************************/// Controlaremos la memoria en la insercion de elementos en la listaint AgendaLlena(nodoagenda *){    return 0;}/*****************************************************************************************/// Devuelve -1 si el elemento esta en la lista. 0 en caso contrarioint EstaElementoAgenda(nodoagenda *listad,int dni){      nodoagenda *Paux;      int res;            Paux = listad;      while ((Paux != NULL)&&(Paux->dni != dni))            Paux = Paux->sig;            if (Paux == NULL)         res = 0;      else          res = -1;            return res;}/*****************************************************************************************/void InsertarAgenda(nodoagenda *(&listad)){     nodoagenda *Nuevonodo, *Paux;     int dni;     char nombre[15],apellidos[25];          Nuevonodo = (nodoagenda *)malloc(sizeof(nodoagenda));     if (Nuevonodo == NULL)        printf("nSe produjo un error en la creación del elemento.");     else     {         do{            printf("Introduce el dni: ");            scanf("%d",&dni);         }while((dni < 1)||(EstaElementoAgenda(listad,dni)));         Nuevonodo->dni = dni;         fflush(stdin);    //Borra el buffer de teclado         printf("Introduce el nombre: ");         gets(Nuevonodo->nombre);         printf("Introduce los apellidos: ");         gets(Nuevonodo->apellidos);         printf("Introduce la direccion: ");         gets(Nuevonodo->direccion);         Nuevonodo->sig = NULL;         Nuevonodo->ant = NULL;                  if (AgendaVacia(listad))            listad = Nuevonodo;         else         {             if (dni > listad->dni)             {                Nuevonodo->sig = listad;                listad->ant=Nuevonodo;                listad = Nuevonodo;             }             else             {                 Paux = listad;                 while (((Paux->sig)!=NULL)&&((dni < Paux->sig->dni)))                       Paux = Paux->sig;                                  if (Paux->sig != NULL)  //Si no es el ultimo nodo                    Paux->sig->ant=Nuevonodo;                                     Nuevonodo->sig = Paux->sig;                 Nuevonodo->ant = Paux;                 Paux->sig = Nuevonodo;                                   }         }     }         } /*****************************************************************************************/void EliminarElementoAgenda(nodoagenda *(&listad),int dni){   nodoagenda *actual = listad;      while (actual->dni != dni)         actual = actual->sig;      if (actual->ant == NULL)    // Es el primer nodo de la lista   {      if (actual->sig!=NULL)           // Hay mas de un nodo en la lista          actual->sig->ant=NULL;                listad=actual->sig;   }   else   {       if (actual->sig!=NULL)           // Es el ultimo nodo de la lista          actual->sig->ant=actual->ant;          actual->ant->sig=actual->sig;   }          free(actual);} /*****************************************************************************************/void MostrarInversoAgenda(nodoagenda *listad){     nodoagenda *paux=listad;          if (paux != NULL)     {        // Recorremos toda la lista hasta el final              while (paux->sig != NULL)           paux=paux->sig;                // Recorremos toda la lista en orden inverso hasta el primer nodo        while (paux != NULL)        {              printf("nnDNI: %d",paux->dni);              printf("nNombre: %s",paux->nombre);              printf("nApellidos: %s",paux->apellidos);              printf("nDireccion: %s",paux->direccion);              paux=paux->ant;        }     }}/*****************************************************************************************/void BorrarAgenda(nodoagenda *(&listad)){     nodoagenda *paux;          while (listad != NULL)     {        paux=listad;        listad=listad->sig;        free(paux);     }}/*****************************************************************************************/void GuardarAgenda(nodoagenda *listad){     nodoagenda *paux=listad;     FILE*pFile;          if (paux != NULL)     {        // Recorremos toda la lista hasta el final              while (paux->sig != NULL)           paux=paux->sig;                      pFile = fopen ( "amigos.txt" , "wb" );//abrir fichero                  if(pFile== NULL)             puts ("nError guardando el fichero.");          else         {                        // Recorremos toda la lista en orden inverso hasta el primer nodo                      while (paux != NULL)                      {                                                           fwrite(&paux, sizeof paux, 1, pFile);                       printf("nnDNI: %d",paux->dni);                       printf("nNombre: %s",paux->nombre);                       printf("nApellidos: %s",paux->apellidos);                       printf("nDireccion: %s",paux->direccion);                       paux=paux->ant;                       }                                                         if( !fclose(pFile) )                                      printf( "Fichero Guardadon" );                                  else                                      printf( "Error: Fichero NO Guardadon" );         }     }}/*****************************************************************************************/void LeerAgenda(nodoagenda *listad){     nodoagenda *Nuevonodo;        FILE *file = fopen("amigo.txt", "rb");     if ( file != NULL )   {        fclose(file);   }  }   
Gracias de antemano.

czealt:
Debes reemplazar la linea:
   fwrite(&paux, sizeof paux, 1, pFile);

por la siguiente:
   fwrite(paux, sizeof(nodoagenda), 1, pFile);

Saludos :good:

faio:
Muchas gracias
 y la condición para leer la sabrías

czealt:
Bueno, para leer datos de un archivo binario se usa la funcion fread() que acepta los mismos 4 parametros que la funcion fwrite() solo que en lugar de escribir del buffer al disco se lee del disco al buffer.

Ejemplo:

--- Código: C --- void LeerAgenda(){  nodoagenda nodo;    FILE *file = fopen("amigos.txt", "rb");    while(fread(&nodo,sizeof(nodoagenda),1,file)) /* fread() devuelve la cantidad de registros leidos, cuando se llega al final del archivo este valor es 0 y el bucle termina. */  {    printf("DNI: %dn",nodo.dni);    printf("Nombre: %sn",nodo.nombre);    printf("Apellidos: %sn",nodo.apellidos);    printf("Direccion: %sn",nodo.direccion);  }   fclose(file);}   

faio:
Gestoragenda.c

--- Código: C --- #include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <conio.h>#include "agenda.h" char Menu(void); int main(void){    nodoagenda *lista;    int num;    char op;        CrearAgenda(lista);        do{       op = Menu();           switch(op)       {          //***********************************          case 'A':          {             if (!AgendaLlena(lista))                InsertarAgenda(lista);             else                 printf("nNo se puede insertar debido a que la lista esta llena.");                              break;          }          //***********************************          case 'B':          {             do{                 printf("Introduce el dni de la persona a eliminar: ");                 scanf("%d",&num);             }while (num<1);                          if (EstaElementoAgenda(lista,num))                EliminarElementoAgenda(lista,num);             else                printf("nEsa persona no se encuentra en la lista.");                             break;          }          //***********************************          case 'C':          {            printf("n");            MostrarInversoAgenda(lista);            getch();                        break;          }          //***********************************          case 'D'://guardar en fichero          {                           printf("n");            GuardarAgenda(lista);            getch();                          break;          }          //***********************************          case 'E'://leer de fichero          {          printf("n");             LeerAgenda();             getch();                          break;          }          //***********************************          case 'F'://borrar y salir          {             BorrarAgenda(lista);                          break;          }       }    }while (op!='F');     printf("nn");    system("pause");} char Menu(void){     char opcion;          do{          fflush(stdin);          system("cls");          printf("n***************************************************************** ");          printf("n                 A - Insertar en Agenda");          printf("n                 B - Eliminar de Agenda");          printf("n                 C - Mostrar Agenda Orden Creciente");          printf("n                 D - Guardar Agenda");          printf("n                 E - Leer de Fichero");          printf("n                 F - Borrar agenda y Salir");          printf("n***************************************************************** ");          printf("nIntroduce una opcion: ");          scanf("%c",&opcion);          system("cls");          opcion = toupper(opcion);    //tolower     }while ((opcion<'A')||(opcion>'F'));          return opcion;}  
agenda.h

--- Código: C --- typedef struct nodoagenda{        int dni;        char nombre[15];        char apellidos[25];        char direccion[30];        struct nodoagenda *ant;        struct nodoagenda *sig;        }nodoagenda;         void CrearAgenda(nodoagenda *(&)); int AgendaVacia(nodoagenda *); int AgendaLlena(nodoagenda *); int EstaElementoAgenda(nodoagenda *,int); void InsertarAgenda(nodoagenda *(&)); void EliminarElementoAgenda(nodoagenda *(&)); void MostrarInversoAgenda(nodoagenda *); void BorrarAgenda(nodoagenda *(&)); void GuardarAgenda(nodoagenda *); void LeerAgenda();   //void CrearAgenda(nodoagenda *(&listad)){     listad = NULL;}/*****************************************************************************************/int AgendaVacia(nodoagenda *listad){    int dev = 0;        if (listad==NULL)       dev = -1;        return dev;}/*****************************************************************************************/// Controlaremos la memoria en la insercion de elementos en la listaint AgendaLlena(nodoagenda *){    return 0;}/*****************************************************************************************/// Devuelve -1 si el elemento esta en la lista. 0 en caso contrarioint EstaElementoAgenda(nodoagenda *listad,int dni){      nodoagenda *Paux;      int res;            Paux = listad;      while ((Paux != NULL)&&(Paux->dni != dni))            Paux = Paux->sig;            if (Paux == NULL)         res = 0;      else          res = -1;            return res;}/*****************************************************************************************/void InsertarAgenda(nodoagenda *(&listad)){     nodoagenda *Nuevonodo, *Paux;     int dni;     char nombre[15],apellidos[25];          Nuevonodo = (nodoagenda *)malloc(sizeof(nodoagenda));     if (Nuevonodo == NULL)        printf("nSe produjo un error en la creación del elemento.");     else     {         do{            printf("Introduce el dni sin letra: ");            scanf("%d",&dni);         }while((dni < 1)||(EstaElementoAgenda(listad,dni)));         Nuevonodo->dni = dni;         fflush(stdin);    //Borra el buffer de teclado         printf("Introduce el nombre: ");         gets(Nuevonodo->nombre);         printf("Introduce los apellidos: ");         gets(Nuevonodo->apellidos);         printf("Introduce la direccion: ");         gets(Nuevonodo->direccion);         Nuevonodo->sig = NULL;         Nuevonodo->ant = NULL;                  if (AgendaVacia(listad))            listad = Nuevonodo;         else         {             if (dni > listad->dni)             {                Nuevonodo->sig = listad;                listad->ant=Nuevonodo;                listad = Nuevonodo;             }             else             {                 Paux = listad;                 while (((Paux->sig)!=NULL)&&((dni < Paux->sig->dni)))                       Paux = Paux->sig;                                  if (Paux->sig != NULL)  //Si no es el ultimo nodo                    Paux->sig->ant=Nuevonodo;                                     Nuevonodo->sig = Paux->sig;                 Nuevonodo->ant = Paux;                 Paux->sig = Nuevonodo;                                   }         }     }         } /*****************************************************************************************/void EliminarElementoAgenda(nodoagenda *(&listad),int dni){   nodoagenda *actual = listad;      while (actual->dni != dni)         actual = actual->sig;      if (actual->ant == NULL)    // Es el primer nodo de la lista   {      if (actual->sig!=NULL)           // Hay mas de un nodo en la lista          actual->sig->ant=NULL;                listad=actual->sig;   }   else   {       if (actual->sig!=NULL)           // Es el ultimo nodo de la lista          actual->sig->ant=actual->ant;          actual->ant->sig=actual->sig;   }          free(actual);} /*****************************************************************************************/void MostrarInversoAgenda(nodoagenda *listad){     nodoagenda *paux=listad;          if (paux != NULL)     {        // Recorremos toda la lista hasta el final              while (paux->sig != NULL)           paux=paux->sig;                // Recorremos toda la lista en orden inverso hasta el primer nodo        while (paux != NULL)        {              printf("nnDNI: %d",paux->dni);              printf("nNombre: %s",paux->nombre);              printf("nApellidos: %s",paux->apellidos);              printf("nDireccion: %s",paux->direccion);              paux=paux->ant;        }     }}/*****************************************************************************************/void BorrarAgenda(nodoagenda *(&listad)){     nodoagenda *paux;          while (listad != NULL)     {        paux=listad;        listad=listad->sig;        free(paux);     }}/*****************************************************************************************/void GuardarAgenda(nodoagenda *listad){     nodoagenda *paux=listad;     FILE*pFile;     int i=0;          if (paux != NULL)     {        // Recorremos toda la lista hasta el final              while (paux->sig != NULL)           paux=paux->sig;                      pFile = fopen ( "amigos.dat" , "wb" );//abrir fichero                  if(pFile== NULL)             puts ("nError guardando el fichero.");          else         {                        // Recorremos toda la lista en orden inverso hasta el primer nodo                      while (paux != NULL)                      {                      fwrite(paux, sizeof(nodoagenda), 1, pFile);                       paux=paux->ant;                       }                                                         if( !fclose(pFile) )                                      printf( "Fichero Guardadon" );                                  else                                      printf( "Error: Fichero NO Guardadon" );         }     }}/*****************************************************************************************/void LeerAgenda(){   nodoagenda nodo;     FILE*pFile = fopen("amigos.dat", "rb");     while(fread(&nodo,sizeof(nodoagenda),1,pFile)) /* fread() devuelve la cantidad de registros leidos, cuando se llega al final del archivo este valor es 0 y el bucle termina. */   {     printf("DNI: %dn",nodo.dni);     printf("Nombre: %sn",nodo.nombre);     printf("Apellidos: %sn",nodo.apellidos);     printf("Direccion: %sn",nodo.direccion);   }     fclose(pFile);  }  
Muchisimas gracias, Ahora va perfecto.

Navegación

[0] Índice de Mensajes

Ir a la versión completa