Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nordi

[Código] Copia da Arquivo em C [C/C++]

Recommended Posts

Codigo Extraido do site

/* programa que copia arquivo */#include <stdio.h>int main(int argc, char *argv[])  {	FILE *original,*copia;	char caracter;	if(argc < 3)	  {		printf("\nSintaxe correta:\n\n");		printf("copiar ARQUIVO_ORIGEM ARQUIVO_DESTINO\n\n");		exit(1);	  }		while(argv[1])	  {		 if(*argv[1] != *argv[2])		   break;		 printf("\nO nome do arquivo original não pode ser igual ao da\ cópia.\n\n");		 exit(1);	  };	if((original = fopen(argv[1],"rb")) == NULL)	  {		printf("\nErro ao abrir o arquivo original.\n\n");		exit(1);	  }			 	if((copia = fopen(argv[2],"wb")) == NULL)	  {		printf("\nErro ao abrir o arquivo cópia.\n\n");		exit(1);	  }	while(!feof(original))	  {		caracter = getc(original);		if(!feof(original))		  putc(caracter,copia);	  }	fclose(original);	fclose(copia);			  	printf("\n%s copiado com sucesso com o nome de %s.\n\n",argv[1],argv[2]);	return(0);  }
At+ http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu amigo, não querendo abusar de sua boa vontade, poderia me passar como chamar a função? e para que serve a função putc?Desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro colega, estava por aqui passando e vi este tópico contendo o algoritmo de cópia de arquivos e fiquei um pouco confuso.

Este código não funcionará 100% corretamente.

 

Segue os bugs que levantei:

 

- Comparação dos nomes do arquivo: Está comparando somente o primeiro caracter do nome, logo se tentar copiar de C:\TESTE.TXT para C:\TESTE2.TXT a rotina informará que os nomes estão iguais.

 

- Correção: troque if(*argv[1] != *argv[2]) por if(stricmp( argv[ 1 ], argv[ 2 ] )

 

- O loop na comparação dos nomes é desnecessário.

- Correção: retire o loop.

 

- O loop de copia não copia o ultimo byte do arquivo original e é muito lento.

- Correção: use as funções fread() e fwrite() para tornar a cópia mais rápido, retire o if dentro do loop.

 

O código abaixo exemplica uma rotina completa de cópia de arquivos.

int main( int argc, char** argv ){	 FILE *origem, *destino;	 char buffer[ 2048 ];	 size_t bytes;	 if( argc < 3 )	 {		  printf( "\nSintaxe Correta:\n" );		  printf( "copiar ARQUIVO_ORIGEM ARQUIVO_DESTINO\n\n" );		  return( -1 );	 }	 if( !strcmp( argv[ 1 ], argv[ 2 ] )	 {		  printf( "O nome do arquivo original não pode ser igual ao da cópia.\n" );		  return( -1 );	 }	 origem = fopen( argv[ 1 ], "rb" );	 if( !origem )	 {		  printf( "Erro ao abrir arquivo de origem.\n" );		  return( -1 );	 }	 destino = fopen( argv[ 2 ], "wb" );	 if( !destino )	 {		  fclose( origem );		  printf( "Erro ao abrir arquivo de destino.\n" );		  return( -1 );	 }	 bytes = fread( buffer, sizeof( char ), 2048, origem );	 while( !feof( origem ) )	 {		  fwrite( buffer, sizeof( char ), bytes, destino );		  bytes = fread( buffer, sizeof( char ), 2048, origem );	 }	 fclose( origem );	 fclose( destino );	 return( 0 );}

Espero que este exemplo ajude.

Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.