Ir para o conteúdo
thinkabout

Trocar o conteúdo de dois ficheiros.

Mensagens Recomendadas

thinkabout

Boas,

Sugestões ?

  

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>


/*
Ex5.
Desenvolva uma função que troque o conteúdo de dois ficheiros. Os nomes dos ficheiros são
passados como argumentos da função.
*/

int main(int argc, const char * argv[])
{

   char c;
   FILE *troca1 , *temporario, *troca2;
   /* Testar a Linha de Comando */
   if (argc!=4)
   {
       printf("Sintaxe: \n\n%s Origem temporario Destino\n\n",argv[0]);
       exit(1); /*Termina o Programa*/
   }

   // Vou copiar o troca 1 para o temporario. troca1 -> temporario
   if ( (troca1=fopen(argv[1],"r"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(2);
   }

   if ( (temporario=fopen(argv[2],"w"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(3);
   }

   while (fread(&c,sizeof(char),1,troca1)==1) 
   {
       fwrite(&c,sizeof(char),1,temporario);
   }

   fclose(troca1);
   fclose(temporario);


   // Vou abrir o troca1 para escrever la o que está no troca 2.

   if ( (troca1=fopen(argv[1],"w"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(4);
   }

   if ( (troca2=fopen(argv[3],"r"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(5);
   }


   while (fread(&c,sizeof(char),1,troca2)==1) 
   {
       fwrite(&c,sizeof(char),1,troca1);
   }

   fclose(troca1);
   fclose(troca2);

   // Vou abrir o temporario para escrever o que me falta no troca 2.
   if ( (troca2=fopen(argv[3],"w"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(6);
   }

   if ( (temporario=fopen(argv[2],"r"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(7);
   }

   while (fread(&c,sizeof(char),1,temporario)==1) 
   {
       fwrite(&c,sizeof(char),1,troca2);
   }

   fclose(troca2);
   fclose(temporario);
   remove(argv[2]); // Apagar o ficheiro temporário criado.
   return 0;
}

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thinkabout

ups foste mais rápido, tinha acabo de editar o post e o código e meti.

    remove(argv[2]); // Apagar o ficheiro temporário criado. 

Não estou é bem a perceber a diferença do unlink para o remove, vou ver se vejo isso melhor.

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

remove() está descrito no Standard de C; unlink() não é Standard, mas quase: está descrito para POSIX.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.