/* +-----------------------------------------------+ | COPIA DE UN FICHERO (SIMILAR AL COPY DEL DOS) | +-----------------------------------------------+ Este programa copia un fichero a otro fichero. Funcionalmente este programa es similar al copy del DOS o al cat del UNIX. Si el fichero de salida es con, se está haciendo un type del DOS. Si el fichero de entrada es con, recuerda que el carácter fin de fichero se escribe con CTRL-Z en el DOS. La función strcpy() copia el string pasado como segundo argumento en el string pasado como primer argumento. La función toupper() devuelve el carácter pasado como argumento en mayúscula. */ #include <stdio.h> /* printf (), gets (), fprintf (), stderr, EOF, fopen (), fclose (), fgetc (), fputc (), NULL */ #include <conio.h> /* getch () */ #include <string.h> /* strcpy () */ #include <ctype.h> /* toupper () */ #define BOOLEAN int #define TRUE 1 #define FALSE 0 #define ESC 27 #define ENTER '\r' #define NUMMAXCARACTERES 255 void main (void) { BOOLEAN salir = FALSE; char nombre_fichero_entrada[NUMMAXCARACTERES], nombre_fichero_salida[NUMMAXCARACTERES]; FILE *pfe, *pfs; /* punteros a fichero de entrada y fichero de salida resp. */ char ch; while (! salir) { puts ("\n\nCOPIAR FICHERO CON EL SISTEMA DE FICHEROS DE ALTO NIVEL:\n"); printf ("Introduzca nombre de fichero de entrada (ENTER o CON " "para teclado): "); gets (nombre_fichero_entrada); if (*nombre_fichero_entrada == '\0') strcpy (nombre_fichero_entrada, "con"); printf ("Introduzca nombre de fichero de salida (ENTER o CON " "para pantalla): "); gets (nombre_fichero_salida); if (*nombre_fichero_salida == '\0') strcpy (nombre_fichero_salida, "con"); if ((pfe = fopen (nombre_fichero_entrada, "r")) == NULL) fprintf (stderr, "\nERROR: No es posible abrir el fichero de " "entrada %s.\n", nombre_fichero_entrada); else if ((pfs = fopen (nombre_fichero_salida, "w")) == NULL) { fprintf (stderr, "\nERROR: No es posible abrir el fichero " "de salida %s.\n", nombre_fichero_salida); fclose (pfe); } else { int c; while ((c = fgetc (pfe)) != EOF) fputc (c, pfs); fclose (pfe); fclose (pfs); } printf ("\n\n¿Desea copiar otro fichero (S o ENTER: Sí; N o " "ESC: No)? "); do { ch = getch (); } while (ch != ENTER && toupper (ch) != 'S' && ch != ESC && toupper (ch) != 'N'); salir = ch == ESC || toupper (ch) == 'N'; } }