C - Ler de ficheiro binário e imprimir.

JPSV

Membro
Boas,

Eu tenho um ficheiro binário, chamado "file.bin", do qual eu quero ler caracter a caracter e imprimi-lo.
O meu problema é que quando escrevi a função que o faz, esta imprime-me muito poucos dos caracteres que realmente lá se encontram e o resto é lixo, ah! e faz-me um "beep" sempre que a corro..

A função é a seguinte:

Código:
void listar()
{
	int c;
	
	FILE *fp;


	fp = fopen("file.bin", "rb");


	while((c = fgetc(fp)) != EOF)
	{
		printf("%c", c);
	}


	fclose(fp);
	system("pause");
}

Será que alguém me consegue ajudar?
 
Boas,
assim à primeira vista, eu diria:

[1] é boa prática testares o apontador para ficheiro, pois pode ser que este não consiga abrir o ficheiro.
if (fp==NULL)
(...)
[2] ainda esta semana tive um problema por estar a ler e guardar dentro de um if (não sei se é isso ou nao, mas fica o apontamento) se fosse eu, faria uma coisa do genero:
while(1){
c=fgetc(fp);
if (c==EOF)
break;
printf("%c\n",c);
}
[3] quanto ao beep pode ser que estejas a imprimir o caracter '\a'.

Cumps,
 
Boas,

Eu tenho um ficheiro binário, chamado "file.bin", do qual eu quero ler caracter a caracter e imprimi-lo

Se tens um ficheiro binário não o deves ler caracter a caracter. Caracteres existem num ficheiro de texto, um ficheiro binário tem bytes. Alguns destes bytes podem ter valores que correspondem a caracteres que não podem ser impressos. Por exemplo, se o teu ficheiro binário tiver um byte com o valor 0, e se interpretares este valor como um caracter, corresponderia ao caracter '\0' que significa fim de string, e que não pode ser impresso.

Por isso, se de facto o teu ficheiro é binário, tens de usar as funções que o ee09115 indicou, e depois tens de decidir o que vais fazer com esses dados. Podes imprimir a representação decimal, ou hexadecimal do valor, por exemplo.

man fopen
man fclose
man fread
man fwrite
 
Viva

Eu acho que terás que usar um for para armazenares o texto num vector.
Depois usas um strlen para ler o comprimento do vector
E outro for para imprimir a string.
Estes dois ultimos podes usar juntos.

Já não me lembro muito de C mas se não conseguires apita que tento rever os meus exs.
 
Ah lembrei-me de outra coisa.

Para usares este programa deverás ter outro que grava como binário.
Se abrires com o notepad, escreveres algo e guardares não funciona. Tem que ser salvo de forma igual
 
Se estiveres em unix:

Código:
int listar(){
    int fd = open("file.bin",O_RDONLY);
    char buffer[100]="";
    int n = 0;
    //Se conseguio abrir o ficheiro em modo de leitura
    if(fd!=-1){
        //Ler ficheiro até não haver mais nada para ler
        while((n=read(fd,buffer,sizeof(buffer)))>0){
            buffer[n-1]='\n';
            printf("%s",buffer);
        }
        return 1; //Sucesso
    }
    else{
        return -1; //Erro
    }
}
 
Última edição:
Back
Topo