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.
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.
Archivos de texto en Lenguaje C - Abrir, cerrar, leer y agregar ficheros txt
ChatGPT Gratis
Realiza preguntas sobre cualquier tema
¡Participa!
¡Compártelo en tus Redes Sociales!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 18 de November, 2024, de
https://disenowebakus.net/ficheros.php