Escribir dentro de un fichero en C

En el artículo anterior explicaba cómo abrir, crear y cerrar un fichero en C, pero en este artículo os contaré cómo podemos escribir dentro de un fichero. Podremos hacerlo empleando las diferentes funciones que nos ofrece la librería stdio de C, como fputc, fputs y fwrite.

fputc

La función fputc nos permite escribir en un fichero caracteres, pero lo podremos hacer de uno en uno. La sintaxis es:

fputc(caracter, puntero);

Donde caracter es el carácter que queremos escribir y puntero es la dirección donde está el fichero en el que queremos escribir.

fputs

También podemos escribir cadenas de caracteres en un fichero, para ello utilizamos la función fputs. La sintaxis es:

fputs(cadena, puntero);

Donde cadena es la cadena de caracteres que queremos escribir en el archivo, al igual que antes, es la dirección de nuestro fichero.

fwrite

Esta función es diferente, la función fwrite nos permite trabajar tanto con fichero de texto como binarios y escribir cualquier tipo de datos. Al ser una función mas completa voy a desarrollar un poco mas su explicación con un ejemplo mas detallado. Su sintaxis general es:

fwrite(direccion_dato, tamaño, veces, puntero);

Aquí tenemos varios argumentos, por ejemplo direccion_dato es la dirección de la variable o elemento que queremos escribir en el fichero indicado por la variable puntero. En tamaño debemos indicar el tamaño en bytes de la variable o elemento  escribir en el fichero. Para obtener el tamaño de una variable podemos usar el operador sizeof y para obtener el tamaño de una cadena la función strlen. En veces indicamos cuántos elementos de tamaño tamaño vamos a escribir. ¡Cuidado!, veces no es el número de veces que queremos que se escriba repetidamente el dato indicado en direccion_dato. Veamos unos ejemplos:

#include <stdio.h>

int main(void) {

	/* Declaramos la variable fichero como puntero a FILE. */
	FILE *fichero;

	/* Declaramos la variable caracter con un caracter ASCII. */
	char caracter = 'A';

	/* Abrimos "fichero1.txt" en modo texto y
	 * guardamos su direccion en el puntero. */
	fichero = fopen("fichero1.txt", "wt");

	if(fichero == NULL) {
		printf("Error: No se ha podido crear el fichero archivo1.txt");
	} else {
		/* Escribimos dentro de "fichero1.txt". */
		fwrite(&caracter, sizeof(caracter), 1, fichero);

		/* Cerramos "fichero1.txt". */
		fclose(fichero);
	}

	fflush(stdin);
	printf("\n\nPulsa Intro para finalizar...");
	getchar();
}

En la línea

fwrite(&caracter, sizeof(caracter), 1, fichero);

hemos escrito en el fichero "fichero1.txt" el contenido de la variable caracter,  que es 'A'. Para ello indicamos en el primer parámetro la dirección de memoria de la variable caracter, cuyo contenido queremos escribir en el fichero. En el segundo parámetro escribimos el tamaño en bytes de la variable caracter. Utilizamos el operador sizeof  para que lo calcule. El tercer parámetro indica cuántos elementos de tamaño sizeof(caracter) hay en la variable caracter, en este caso 1. Este parámetro generalmente será 1, aunque al escribir arrays en los ficheros puede variar. El cuarto parámetro es la variable puntero al fichero abierto.

Si en lugar de un caracter quisiéramos escribir una cadena de caracteres podemos hacerlo de la siguiente manera:

char nombre[30];
fwrite(&nombre, strlen(nombre), 1, fichero);

Y si lo que queremos es almacenar en un archivo binario el contenido de una variable de tipo struct llamada empleado debemos hacerlo de la siguiente manera:

fwrite(&empleado, sizeof(empleado), 1, fichero);

En el siguiente programa se escribe en el fichero "archivo1.txt" una frase que se le pide introducir al usuario:

#include <stdio.h>
#include <string.h>

int main(void) {

	/* Declaramos la variable fichero como puntero a FILE. */
	FILE *fichero;

	/* Declaramos la variable frase de tipo array. */
	char frase[100];

	/* Abrimos "fichero1.txt" en modo texto y
	 * guardamos su direccion en el puntero. */
	fichero = fopen("fichero1.txt", "wt");

	if(fichero == NULL) {
		printf("Error: No se ha podido crear el fichero archivo1.txt");
	} else {

		/* Se pide al usuario que introduzca una frase. */
		printf("Escriba una frase: ");
		scanf("%s", frase);

		/* Escribimos dentro de "fichero1.txt". */
		fwrite(&frase, strlen(frase), 1, fichero);

		/* Cerramos "fichero1.txt". */
		fclose(fichero);
	}
}

Y por último veamos un ejemplo en el que queremos crear un fichero binario, llamado "empleados.dat", en el que almacenamos tres estructuras con la siguiente definición:

#include <stdio.h>
#include <string.h>

struct datos_empleado {
	char nombre[30];
	int edad;
};

int main(void) {

	/* Declaramos la variable fichero como puntero a FILE. */
	FILE *fichero;

	struct datos_empleado empleado;

	/* Abrimos "empleados.dat" en modo texto y
	 * guardamos su direccion en el puntero. */
	fichero = fopen("empleados.dat", "wb");

	if (fichero == NULL) {
		printf("Error: No se ha podido crear el fichero empleados.dat");
	} else {
		int n;

		/* Se pide al usuario que introduzca
		 * los datos de 3 empleados. */
		for(n=0;n<=2;n++){
			fflush (stdin);
			printf("\nNombre: ");
			scanf("%s", empleado.nombre);
			printf("Edad: ");
			scanf("%d", &empleado.edad);
			fwrite(&empleado, sizeof(empleado), 1, fichero);
		}

		/* Cerramos "empleados.dat". */
		fclose(fichero);
	}
}

En el próximo artículo explicaré cómo leer el contenido de un archivo en C.

3 opiniones en “Escribir dentro de un fichero en C”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.