Ficheros - Abrir, cerrar, leer y agregar archivos de texto

Para la manipulación de archivos se utilizan las funciones fopen(), fclose(), freopen() y los operadores w, w+, a, a+, r y r+ para su modo de uso.

Ficheros - Abrir, cerrar, leer y agregar archivos de texto | Aprender Programación en C | Para la manipulación de archivos se utilizan las funciones fopen(), fclose(), freopen() y los operadores w, w+, a, a+, r y r+ para su modo de uso
COMPÁRTELO:

Ahora veremos la forma de almacenar datos que podremos recuperar cuando deseemos. Estudiaremos los distintos modos en que podemos abrir un fichero, así como las funciones para leer y escribir en él.

Apertura de archivos

fopen()

Antes de abrir un fichero necesitamos declarar un puntero de tipo FILE, con el que trabajaremos durante todo el proceso. Para abrir el fichero utilizaremos la función fopen( ).

Su sintaxis es:

FILE *puntero;
puntero = fopen ( nombre del fichero, "modo de apertura" );

Donde puntero es la variable de tipo FILE, nombre del fichero es el nombre que daremos al fichero que queremos crear o abrir. Este nombre debe ir encerrado entre comillas. También podemos especificar la ruta donde se encuentra o utilizar un array que contenga el nombre del archivo ( en este caso no se pondrán las comillas ). Algunos ejemplos:

puntero=fopen("DATOS.DAT","r");
puntero=fopen("C:\\TXT\\SALUDO.TXT","w");

Un archivo puede ser abierto en dos modos diferentes, en modo texto o en modo binario. A continuación lo veremos con más detalle.

Modo texto

Operador Descripción
w crea un fichero de escritura. Si ya existe lo crea de nuevo
w+ crea un fichero de lectura y escritura. Si ya existe lo crea de nuevo
a abre o crea un fichero para añadir datos al final del mismo
a+ abre o crea un fichero para leer y añadir datos al final del mismo
r abre un fichero de lectura
r+ abre un fichero de lectura y escritura

Modo binario

Operador Descripción
wb crea un fichero de escritura. Si ya existe lo crea de nuevo
w+b crea un fichero de lectura y escritura. Si ya existe lo crea de nuevo
ab abre o crea un fichero para añadir datos al final del mismo
a+b abre o crea un fichero para leer y añadir datos al final del mismo
rb abre un fichero de lectura
r+b abre un fichero de lectura y escritura

La función fopen devuelve, como ya hemos visto, un puntero de tipo FILE. Si al intentar abrir el fichero se produjese un error ( por ejemplo si no existe y lo estamos abriendo en modo lectura ), la función fopen devolvería NULL. Por esta razón es mejor controlar las posibles causas de error a la hora de programar. Un ejemplo

FILE *pf;
pf=fopen("datos.txt","r");
if (pf == NULL) printf("Error al abrir el fichero");

freopen()

Esta función cierra el fichero apuntado por el puntero y reasigna este puntero a un fichero que será abierto. Su sintaxis es:

freopen(nombre del fichero,"modo de apertura",puntero);

Donde nombre del fichero es el nombre del nuevo fichero que queremos abrir, luego el modo de apertura, y finalmente el puntero que va a ser reasignado

Cierre de archivos

Una vez que hemos acabado nuestro trabajo con un fichero es recomendable cerrarlo. Los ficheros se cierran al finalizar el programa pero el número de estos que pueden estar abiertos es limitado. Para cerrar los ficheros utilizaremos la función fclose( );

Esta función cierra el fichero, cuyo puntero le indicamos como parámetro. Si el fichero se cierra con éxito devuelve 0

fclose(puntero);

Un ejemplo ilustrativo aunque de poca utilidad:

FILE *pf;
pf=fopen("AGENDA.DAT","rb");
if ( pf == NULL ) printf ("Error al abrir el fichero");
else fclose(pf);

Escritura y lectura de archivos

A continuación veremos las funciones que se podrán utilizar dependiendo del dato que queramos escribir y/o leer en el fichero.

Caracter

fputc( variable_caracter , puntero_fichero );

Escribimos un caracter en un fichero ( abierto en modo escritura ). Un ejemplo


	FILE *pf;
	char letra='a';
	if (!(pf=fopen("datos.txt","w"))) /* otra forma de controlar si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else fputc(letra,pf);
	fclose(pf);^b
	fgetc( puntero_fichero );

Lee un caracter de un fichero ( abierto en modo lectura ). Deberemos guardarlo en una variable. Un ejemplo:


	FILE *pf;
	char letra;
	if (!(pf=fopen("datos.txt","r"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		letra=fgetc(pf);
		printf("%c",letra);
		fclose(pf);
	}

Número entero

putw( variable_entera, puntero_fichero );

Escribe un número entero en formato binario en el fichero. Ejemplo:


	FILE *pf;
	int num=3;
	if (!(pf=fopen("datos.txt","wb"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		fputw(num,pf); /* también podíamos haber hecho directamente: fputw(3,pf); */
		fclose(pf);
	}
	getw( puntero_fichero );

Lee un número entero de un fichero, avanzando dos bytes después de cada lectura. Un ejemplo:


	FILE *pf;
	int num;
	if (!(pf=fopen("datos.txt","rb"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		num=getw(pf);
		printf("%d",num);
		fclose(pf);
	}

Cadena de caracteres

fputs( variable_array, puntero_fichero );

Escribe una cadena de caracteres en el fichero. Ejemplo:


	FILE *pf;
	char cad="Me llamo Vicente";
	if (!(pf=fopen("datos.txt","w"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		fputs(cad,pf); /* o también así: fputs("Me llamo Vicente",pf); */
		fclose(pf);
	}
	fgets( variable_array, variable_entera, puntero_fichero );

Lee una cadena de caracteres del fichero y la almacena en variable_array. La variable_entera indica la longitud máxima de caracteres que puede leer. Un ejemplo:


	FILE *pf;
	char cad[80];
	if (!(pf=fopen("datos.txt","rb"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		fgets(cad,80,pf);
		printf("%s",cad);
		fclose(pf);
	}

Con formato

fprintf( puntero_fichero, formato, argumentos);

Funciona igual que un printf pero guarda la salida en un fichero. Ejemplo:


	FILE *pf;
	char nombre[20]="Santiago";
	int edad=34;
	if (!(pf=fopen("datos.txt","w"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		fprintf(pf,"%20s%2d\n",nombre,edad);
		fclose(pf);
	}
	fscanf( puntero_fichero, formato, argumentos );

Lee los argumentos del fichero. Al igual que con un scanf, deberemos indicar la dirección de memoria de los argumentos con el símbolo & ( ampersand ). Un ejemplo


	FILE *pf;
	char nombre[20];
	int edad;
	if (!(pf=fopen("datos.txt","rb"))) /* controlamos si se produce un error */
	{
		printf("Error al abrir el fichero");
		exit(0); /* abandonamos el programa */
	}
	else 
	{
		fscanf(pf,"%20s%2d\",nombre,&edad);
		printf("Nombre: %s  Edad: %d",nombre,edad);
		fclose(pf);
	}

Estructuras

fwrite( *buffer, tamaño, nº de veces, puntero_fichero );

Se utiliza para escribir bloques de texto o de datos, estructuras, en un fichero. En esta función, *buffer será la dirección de memoria de la cuál se recogerán los datos; tamaño, el tamaño en bytes que ocupan esos datos y nº de veces, será el número de elementos del tamaño indicado que se escribirán.

fread( *buffer, tamaño, nº de veces, puntero_fichero );

Se utiliza para leer bloques de texto o de datos de un fichero. En esta función, *buffer es la dirección de memoria en la que se almacenan los datos; tamaño, el tamaño en bytes que ocupan esos datos y nº de veces, será el número de elementos del tamaño indicado que se leerán.

Puedes encontrar ejemplos sobre la apertura y cierre de ficheros, así como de la lectura y escritura de datos, en el archivo IMAGECAT.C. Se trata de un programa que crea un catálogo en formato HTML a partir de las imágenes que se encuentran en un directorio determinado.

Otras funciones para archivos

rewind( puntero_fichero );

Sitúa el puntero al principio del archivo

fseek( puntero_fichero, long posicion, int origen );

Sitúa el puntero en la posicion que le indiquemos. Como origen podremos poner:

0 o SEEK_SET, el principio del fichero
1 o SEEK_CUR, la posición actual
2 o SEEK_END, el final del fichero

rename( nombre1, nombre2 );

Su función es exactamente la misma que la que conocemos en MS-DOS. Cambia el nombre del fichero nombre1 por un nuevo nombre, nombre2.

remove( nombre );

Como la función del DOS del, podremos eliminar el archivo indicado en nombre.

Detección de final de archivos

feof( puntero_fichero );

Siempre deberemos controlar si hemos llegado al final de fichero cuando estemos leyendo, de lo contrario podrían producirse errores de lectura no deseados. Para este fin disponemos de la función feof( ). Esta función retorna 0 si no ha llegado al final, y un valor diferente de 0 si lo ha alcanzado.

Pues con esto llegamos al final del tema. Espero que no haya sido muy pesado. No es necesario que te aprendas todas las funciones de memoria. Céntrate sobre todo en las funciones fputs( ), fgets( ), fprintf( ), fwrite( ) y fread( ). Con estas cinco se pueden gestionar los ficheros perfectamente.

CITAR ARTÍCULO


Para tareas, investigaciones, tesis, libros, revistas, blogs ó artículos académicos

Referencia en Formato APA:

Delgado, Hugo. (2020).
Ficheros - Abrir, cerrar, leer y agregar archivos de texto.
Recuperado 27 de mayo, 2020, de
https://disenowebakus.net/ficheros.php

¡Participa!

¡Compártelo con tus amigos en Redes Sociales!
Compartir en:

Profesor en la Universidad de Guadalajara

Hugo Delgado Desarrollador y Diseñador Web en Puerto Vallarta

Profesional en Desarrollo Web y Posicionamiento SEO desde hace más de 15 años continuos.
Contamos con más de 200 constancias y reconocimientos en la trayectoria Académica y Profesional, incluidos diplomados certificados por Google.

CONTINÚA APRENDIENDO

TAMBIÉN MERECE LA PENA VISITAR:

¿Todavía no encuentras lo que necesitas?

Usa nuestro buscador interno para descubrir más información
Contenido patrocinado:

¿Te gustaría aprender más sobre Diseño Web?

Conoce todos los cursos y tutoriales que tenemos para ti completamente gratis
Aprender Diseño Web
 

Deja tu Comentario