/*
+-----------------------------------------------+
| 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';
}
}