Programa en C para Concatenar Dos Archivos de Texto: Código Comentado y Explicado
Programa en C para concatenar dos archivos de texto
A continuación se presentan dos versiones de un programa en lenguaje C que copia el contenido de dos archivos de texto en un tercer archivo llamado destino.txt. La primera versión solicita los nombres de los archivos por teclado; la segunda los recibe como argumentos de línea de comandos.
Versión 1: nombres de archivo solicitados por teclado
Nombre del programa: examen2
#include <stdio.h>
#include <conio.h>
//#include <stdlib.h>
#include <string.h>
//#include <ctype.h>
void main()
{
FILE *Fdestino; // Declarar al inicio de la función
FILE *Forigen1;
FILE *Forigen2;
char archivo1[20];
char archivo2[30];
//char cad[2048];
char linea[128];
printf("\nNombre del archivo 1: ");
scanf("%s", archivo1);
printf("\nNombre del archivo 2: ");
scanf("%s", archivo2);
if (((Forigen1 = fopen(archivo1, "r")) == NULL) ||
((Forigen2 = fopen(archivo2, "r")) == NULL) ||
((Fdestino = fopen("destino.txt", "w")) == NULL))
{
printf("\nError de apertura de fichero de texto");
getch();
}
else
{
while (fgets(linea, 128, Forigen1) != NULL)
{
printf("\n %s", linea);
// strcat(cad, linea);
fputs(linea, Fdestino);
}
while (fgets(linea, 128, Forigen2) != NULL)
{
printf("\n %s", linea);
// strcat(cad, linea);
fputs(linea, Fdestino);
}
printf("\n\n");
//printf("%s", cad);
}
fclose(Fdestino);
fclose(Forigen1);
fclose(Forigen2);
getch();
}Versión 2: nombres de archivo como argumentos de línea de comandos
Nombre del programa: examen2
#include <stdio.h>
#include <conio.h>
//#include <stdlib.h>
#include <string.h>
//#include <ctype.h>
void main(int argc, char *argv[])
{
FILE *Fdestino; // Declarar al inicio de la función
FILE *Forigen1;
FILE *Forigen2;
char archivo1[20];
char archivo2[30];
//char cad[2048];
char linea[128];
/* printf("\nNombre del archivo 1: ");
scanf("%s", archivo1);
printf("\nNombre del archivo 2: ");
scanf("%s", archivo2);
*/
if (((Forigen1 = fopen(argv[1], "r")) == NULL) ||
((Forigen2 = fopen(argv[2], "r")) == NULL) ||
((Fdestino = fopen("destino.txt", "w")) == NULL))
{
printf("\nError de apertura de fichero de texto");
getch();
}
else
{
while (fgets(linea, 128, Forigen1) != NULL)
{
printf("\n %s", linea);
// strcat(cad, linea);
fputs(linea, Fdestino);
}
while (fgets(linea, 128, Forigen2) != NULL)
{
printf("\n %s", linea);
// strcat(cad, linea);
fputs(linea, Fdestino);
}
printf("\n\n");
//printf("%s", cad);
}
fclose(Fdestino);
fclose(Forigen1);
fclose(Forigen2);
getch();
}Observaciones
Ambas versiones abren los archivos de origen en modo lectura ("r") y el archivo destino.txt en modo escritura ("w"), copiando línea a línea el contenido del primero y después del segundo. La función fgets lee como máximo 127 caracteres por línea, y fputs escribe la cadena en el destino.
En la versión 2, los argumentos argv[1] y argv[2] corresponden a los nombres de los dos archivos de origen. Es recomendable verificar que argc sea al menos 3 antes de acceder a estos índices.