Você está na página 1de 2

#include<stdio.

h>
#include<stdlib.h>

int main()
{
FILE *arquivo, *arquivo2;
char c;
//Abrindo o arquivo original para leitura em texto.
arquivo = fopen("saturno.txt", "r");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//A largura em caracteres da figura será ateh encontrarmos o primeiro
//retorno de linha.
int contador = 0;
while((c = getc(arquivo)) != EOF && c != '\n')
contador++;
printf("contador: %d\n", contador);

fclose(arquivo);//Fechando o arquivo

//Reabrindo o arquivo original para leitura binaria.


arquivo = fopen("saturno.txt", "rb");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!\n");
exit(0);
}
//Abrindo (ou criando) o arquivo da figura espelhada para
//Escrita binaria.
arquivo2 = fopen("saturno2.txt", "w+b");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo2!\n");
exit(0);
}
//Vetor original guarda uma linha do arquivo original.
//Vetor novo recebe os elementos de veto_original em ordem invertida.
//Excetuando o '\n'.
char *vetor_original, *vetor_novo;
vetor_original = (char *) malloc(contador + 1);
vetor_novo = (char *) malloc(contador + 1);
while(!feof(arquivo))
{
if(fread(vetor_original, sizeof(char), contador + 1, arquivo) < contador)
printf("Erro na leitura do arquivo!\n");
//Realizando ao quase-inversao.
for(int i = 1; i <contador; i++)
vetor_novo[contador - i] = vetor_original[i];
vetor_novo[contador] = '\n';
//Gravando o novo arquivo
if(fwrite(vetor_novo, sizeof(char), contador+1, arquivo2) <contador)
printf("Erro na escrita no arquivo2\n!");
}
//Fechando os arquivos.
fclose(arquivo);
fclose(arquivo2);
//Liberando a memoria.
free(vetor_novo);
free(vetor_original);
return 0;
}

Você também pode gostar