Problema Lendo arquivo binário para arquivo de texto

1. Problema Lendo arquivo binário para arquivo de texto

Steve
Steve

(usa Slackware)

Enviado em 30/03/2020 - 21:40h

Não consigo compreender porque ao imprimir na tela do terminal fica perfeito!
Mas qdo eu gravo no arquivo ele não grava como texto! E sim como binário igual ao arquivo de Origem!
 #include <stdio.h>
int main(void) {
FILE *File_Read = fopen("Binario.PDB", "rb");
FILE *File_Creation = fopen("TextoNormal.txt", "w"); // Não gravou como texto nem usando "wt"

for(int Caracter; (Caracter = getc(File_Read)) != EOF;) {
//for(char Caracter; (Caracter = getc(File_Read)) != EOF;) { // Nem usando char fuciona
putchar(Caracter); // Na tela do terminal está exibindo corretamente!
putc(Caracter, File_Creation);
//fprintf(File_Creation, "%d", Caracter); // Coloca um monte de números o que não é o que desejo
//fprintf(File_Creation, "%c", Caracter); // Não muda nada formatando
}
fclose(File_Read);
fclose(File_Creation);
}



  


2. Re: Problema Lendo arquivo binário para arquivo de texto

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/03/2020 - 04:10h

Steve escreveu:

Não consigo compreender porque ao imprimir na tela do terminal fica perfeito!
Mas qdo eu gravo no arquivo ele não grava como texto! E sim como binário igual ao arquivo de Origem!


Esta dúvida tem causa semelhante à outra que você postou e que eu já respondi. O que está dito lá vale aqui.

Então, eu vou, aqui, falar sobre erros que estão marcados como comentários no seu programa.

 #include <stdio.h>
int main(void) {
FILE *File_Read = fopen("Binario.PDB", "rb");
FILE *File_Creation = fopen("TextoNormal.txt", "w"); // Não gravou como texto nem usando "wt"

for(int Caracter; (Caracter = getc(File_Read)) != EOF;) {
//for(char Caracter; (Caracter = getc(File_Read)) != EOF;) { // Nem usando char fuciona


Errado seria se você usasse char para receber o tipo de retorno de getc(), porque a função sinaliza erro com o valor de retorno inteiro -1 (que é o valor de EOF). Se você usasse char, não teria como distinguir entre erro durante a leitura e um eventual caráter válido com valor 255 (cuja representação binária é a mesma de -1 nos nossos PCs).

      putchar(Caracter); // Na tela do terminal está exibindo corretamente!
putc(Caracter, File_Creation);
//fprintf(File_Creation, "%d", Caracter); // Coloca um monte de números o que não é o que desejo
//fprintf(File_Creation, "%c", Caracter); // Não muda nada formatando


Nem deveria. O que você esperava que pudesse ser diferente?

   }
fclose(File_Read);
fclose(File_Creation);
}




... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts