• Martes 16 de Abril de 2024, 20:53

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - leopopologuitarreta

Páginas: [1]
1
C/C++ / leer archivo binario
« en: Jueves 25 de Enero de 2018, 19:45 »
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);
}

Páginas: [1]