• Domingo 15 de Diciembre de 2024, 08:26

Autor Tema:  leer archivo binario  (Leído 2106 veces)

leopopologuitarreta

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
leer archivo binario
« en: Jueves 25 de Enero de 2018, 19:45 »
0
buenas, tengo un problema al levantar el archivo (o quizas guardar), es un programa de un ingreso de personas que van a un campamento, hecho con arraylist. el problema es que, ingreso datos, los muestro, salgo del programa, pero cuando entro ya no estan, como si no los hubiera levantado. si alguno sabe que puede ser, desde ya se los agradezco  :gracias:

(les dejo las funciones de agregar y listar)


void imprimir_acampante(eAcampante* this, int i)
{
    if(this != NULL)
    {
        gotoxy(1, i);
        printf("%d", this->id);
        gotoxy(5, i);
        printf("%s", this->DNI);
        gotoxy(15, i);
        printf("%s", this->nombre);
        gotoxy(27, i);
        printf("%s", this->apellido);
        gotoxy(39, i);
        printf("%s", this->liderIn);
        gotoxy(56, i);
        printf("%s", this->liderSup);
        gotoxy(71, i);
        printf("%s", this->anexo);
    }
}

void imprimir_acampantes(eAcampante* this, ArrayList* lista)
{
    FILE* archivo;
    int cantidad;

    if((archivo = fopen("acampantes.bin", "rb"))== NULL)
    {
        printf("No se pudo cargar el archivo");
    }
    else
    {
        system("cls");
        gotoxy(1, 2);
        printf("Lista de acampantes\n\n");
        gotoxy(1, 4);
        printf("Id");
        gotoxy(5, 4);
        printf("DNI");
        gotoxy(15, 4);
        printf("Nombre");
        gotoxy(27, 4);
        printf("Apellido");
        gotoxy(39, 4);
        printf("Lider inmediato");
        gotoxy(56, 4);
        printf("Lider superior");
        gotoxy(71, 4);
        printf("Anexo");

        while(!feof(archivo))
        {
            cantidad = fread(&this, sizeof(this), 1, archivo);

            if(cantidad!=1)
            {
                if(feof(archivo))
                    break;
                else
                {
                    perror("No leyo el ultimo registro");
                    break;
                }
            }

            for(int i=0; i<lista->len(lista); i++)
            {
                this = (eAcampante*)lista->get(lista, i);
                imprimir_acampante(this, i+5);
            }
        }
    }
    fclose(archivo);
    printf("\n\n\n");
    system("pause");
}

void agregar_acampante(eAcampante* this, ArrayList* lista)
{
    FILE* archivo;
    char auxCad[25];
    int aux;
    int id;
    this = nuevo_acampante();

    if((archivo = fopen("acampantes.bin", "ab"))==NULL)
    {
        printf("No existe el archivo.");
        getch();
    }
    else
    {
        if(this != NULL)
        {
            system("cls");
            printf("**Alta acampante**\n\n");
            printf("Ingrese id: ");
            scanf("%d", &id);
            // valido id
            acampante_setID(this, id);

            printf("Ingrese nombre: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>25)
            {
                printf("reingrese nombre. (max 25.)");
                gets(auxCad);
            }
            strcpy(this->nombre, auxCad);
            printf("Ingrese apellido: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>25)
            {
                printf("reingrese apellido. (max 25.)");
                gets(auxCad);
            }
            strcpy(this->apellido, auxCad);
            printf("Ingrese DNI: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>9)
            {
                printf("reingrese DNI. (max 9 digitos.)");
                gets(auxCad);
            }
            strcpy(this->DNI, auxCad);
            printf("Lider inmediato: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>30)
            {
                printf("reingrese nombre. (max 30.)");
                gets(auxCad);
            }
            strcpy(this->liderIn, auxCad);
            printf("Lider superior: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>30)
            {
                printf("reingrese nombre. (max 30.)");
                gets(auxCad);
            }
            strcpy(this->liderSup, auxCad);
            printf("Anexo: ");
            fflush(stdin);
            gets(auxCad);
            while(strlen(auxCad)>25)
            {
                printf("reingrese anexo. (max 20.)");
                gets(auxCad);
            }
            strcpy(this->anexo, auxCad);
            printf("1-Carpa    2-Habitacion: ");
            scanf("%d", &aux);
            while(aux < 1 && aux > 2)
            {
                printf("Error, ingrese opcion 1 o 2: ");
                scanf("%d", &aux);
            }
            this->car_hab = aux;

            this->isEmpty = 0;
            printf("\nAcampante agregado con exito.\n\n");
            system("pause");
            lista->add(lista, this);


        }
        else
        {
            printf("no se pudo agregar al acampante.");
        }
    }
    fwrite(this, sizeof(this), 1, archivo);
    fclose(archivo);
}