[Volta]

 

/* Arquivo copiaarquivo.c
// ----------------------
// Este programa faz uma cópia de um arquivo dado pelo usuário.
// A operação de cópia usa as funções getc/putc. O programa é
// uma cópia do copyfile.c de E. Roberts (The Art and Science
// of C).
//////////////////////////////////////////////////////////// */


/* Seção 1: Protótipos de funções
////////////////////////////// */

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

void  CopieArquivo (FILE *arqEntrada, FILE *arqSaida);
FILE *AbraArquivo (string prompt, string mode);


/* Seção 2: Tipos de dados
/////////////////////// */

typedef char *string;
typedef enum {FALSE, TRUE} bool;


/* Seção 3: Programa principal
/////////////////////////// */

int main (void)
{
   FILE *arqEntrada, *arqSaida;

   printf ("Este progrma faz uma cópia de um arquivo dado.\n");
   arqEntrada = AbraArquivo ("Arquivo velho: ", "r");
   arqSaida = AbraArquivo ("Arquivo novo: ", "w");
   CopieArquivo (arqEntrada, arqSaida);
   fclose (arqEntrada);
   fclose (arqSaida);
   return EXIT_SUCCESS;
}


/* Função CopieArquivo
// Uso típico: CopieArquivo (arqEntrada, arqSaida);
// -----------------------------------------------
// Esta função copia o conteúdo de arqEntrada para arqSaida.
// O usuário deve abrir os arquivos antes de chamar esta 
// função e deve fechá-los depois. */

void CopieArquivo (FILE *arqEntrada, FILE *arqSaida)
{
   int ch;

   while ((ch = getc (arqEntrada)) != EOF)
       putc (ch, arqSaida);
}


/* Função AbraArquivo
// Uso típico: arq = AbraArquivo (prompt, modo);
// --------------------------------------------
// Esta função pede o nome de um arquivo ao usuário. O pedido
// consiste na string propmt. Em seguida, a função tenta abrir
// o arquivo no modo especificado pelo usuário (por exemplo, 
// "w"). Se tiver sucesso, a função devolve um ponteiro para o
// arquivo aberto. Caso contrário, volta a pedir o nome de um
// arquivo ao usuário. */

FILE *AbraArquivo (string prompt, string modo)
{
   string nomeDoArq;
   FILE *resultado;

   while (TRUE) {
       printf ("%s", prompt);
       nomeDoArq = getLine ();
       resultado = fopen (nomeDoArq, modo);
       if (resultado != NULL) break;
       printf ("Não posso abrir o arquivo \"%s\"\n", nomeDoArq);
   }
   return resultado;
}



 


URL of this site: www.ime.usp.br/~pf/algoritmos/
1998 | Last modified: Tue Jan 5 08:44:46 BRST 2010
Paulo Feofiloff
IME-USP