Binary file read error!! I don’t know what’s going on, the binary file exists and my program gives error

Asked

Viewed 27 times

-1

include

include

typedef struct { int code; char departamento; char nome[30]; float salary; }Dadospunctionary;

int main () { FILE *Fp; Data char come out; int Qt;

fp = fopen("problem2.bin", "rb");
if(fp==NULL){
    printf("Erro ao tentar ler o arquivo!");
    exit(1);
}


qt=0;

while(fread(&funcionario, sizeof(DadosFuncionario),1,fp) !=0) {
    printf("Codigo do Funcionario: %d \n", funcionario.codigo);
    printf("Departamento.........: %c \n", funcionario.departamento);
    printf("Nome.................: %s \n", funcionario.nome);
    printf("Salario..............: %.2f \n\n", funcionario.salario);

    qt++;
}

printf("A quantidade de funcionarios eh: %d \n",qt);

fclose(fp);

return 0;

}

1 answer

0

You have not made clear which error is happening or presented the file problem2.bin. Also, your code is badly formatted in the question. Anyway, I played your program by adding a step for creating the file before reading. The program worked normally. That could mean some things:

  • The file does not exist;
  • You are not allowed to read the file;
  • File content is invalid;
  • There’s another error in your code that you’re not seeing (and didn’t present to us).

Follow the code I used for testing.

#include <stdio.h>
#include <string.h>

typedef struct {
        int codigo;
        char departamento;
        char nome[30];
        float salario;
} DadosFuncionario;

int main() {
        FILE *fp;
        DadosFuncionario funcionarioEscrita, funcionario;
        int qt;

        // Inicializa funcionario para escrita
        funcionarioEscrita.codigo = i;
        funcionarioEscrita.departamento = 'a';
        strcpy(funcionarioEscrita.nome, "Fulano de Tal");
        funcionarioEscrita.salario = 200.30; 

        // Escreve dados do funcionario no arquivo
        fp = fopen("funcionarios.bin", "wb"); 
        if (fp == NULL) { 
                printf("Erro ao tetar abrir arquivo pra escrita...\n");
                return -1;
        }

        size_t numeroDeBytes = fwrite(&funcionarioEscrita, sizeof(DadosFuncionario), 1, fp);
        if (numeroDeBytes*sizeof(DadosFuncionario) != sizeof(DadosFuncionario)) {
                printf("Erro ao tentar escrever no arquivo...\n");
                return -2;
        }

        fclose(fp);

        // Realiza a leitura do arquivo
        fp = fopen("funcionarios.bin", "rb");
        if (fp == NULL) {
                printf("Erro ao tentar abrir arquivo para leitura...\n");
                return -3;
        }

        qt = 0;

        while(fread(&funcionario, sizeof(DadosFuncionario), 1, fp) != 0) {
                printf ("Codigo do Funcionario: %d \n", funcionario.codigo);
                printf ("Departamento.........: %c \n", funcionario.departamento);
                printf ("Nome.................: %s \n", funcionario.nome);
                printf ("Salario..............: %.2f \n\n", funcionario.salario);
                qt++;
        }

        printf ("A quantidade de funcionarios eh: %d \n", qt);

        fclose(fp);

        return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.