1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C - Ler de ficheiro binário e imprimir.

Discussão em 'Programação' iniciada por JPSV, 26 de Maio de 2012. (Respostas: 6; Visualizações: 4919)

  1. 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?
     
  2. 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,
     
  3. Flinger

    Flinger Power Member

    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
     
  4. Ruben-1x

    Ruben-1x Banido

    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.
     
  5. Ruben-1x

    Ruben-1x Banido

    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
     
  6. 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: 6 de Junho de 2012

Partilhar esta Página