FILE *fopen(char *, char*);El primer parámetro es el nombre externo del fichero a abrir, escrito en el formato soportado por el sistema operativo correspondiente. El segundo parámetro es una cadena de caracteres que describe el uso al que se va a destinar el fichero (modo de apertura):
"r" Lectura (read).
"w" Escritura (write).
"a" Apédice (append).
- Puntero a la estructura del fichero, que debe asignarse a una variable de este tipo para poder acceder al fichero a través de dicha variable.
- NULL si se ha producido un error al intentar abrir el fichero. Un error muy común consiste en intentar abrir en modo de lectura un fichero que no existe en la ruta de acceso indicada mediante el primer parámetro de la función.
int fclose(FILE *);Valor de retorno de fclose():
- NULL si la operación de cierre se ha realizado satisfactoriamente.
- EOF si se ha producido un error al intentar cerrar el fichero.
int getc(FILE *);La función putc() envía el carácter especificado en el primer parámetro al fichero cuyo puntero se especifica en el segundo parámetro.
int putc(int, FILE *);En el fichero <stdio.h> la funciones getchar() y putchar() se hallan definidas como macros:
#define getchar() getc(stdin)Los ficheros cuyos descriptores son stdin y stdout son abiertos por el sistema operativo y asociados a la entrada y a la salida estándar (teclado y pantalla) del ordenador respectivamente de forma automática.
#define putchar(c) putc((c), stdout)
#include <stdio.h>Si la llamada a la función fopen() se ha realizado con éxito, dicha función devuelve un puntero a la estructura del fichero, que actúa como descriptor del mismo y es asignado a la variable in. Así pues, esta variable apunta a una estructura de tipo FILE que gestiona el fichero TEST.TXT e implementa el buffer (memoria de almacenamiento temporal) de transferencia de datos que dicho fichero utiliza. A partir de entonces, el programa accede al fichero a través de la variable in y no por su nombre externo.
int main() {
FILE *in;
int ch;
if ((in = fopen("TEST.TXT", "r")) != NULL) {
while ((ch = getc(in)) != EOF)
putc(ch, stdout); /* equivale a putchar(ch); */
fclose(in);
}
else
puts("No se puede abrir \"test\".");
putchar('\n');
system("pause");
return 0;
}
- Puntero a la estructura FILE del fichero.
- Desplazamiento (offset) desde el punto de referencia. Podrá ser positivo o negativo.
- Modo que indica el punto de referencia.
int fseek(FILE *, long, int);
Modo
Número
Origen del desplazamiento
SEEK_SET
0
Comienzo del fichero.
SEEK_CUR
1
Posición actual.
SEEK_END
2
Fin del fichero.
- Si no se han producido errores 0.
- En caso de error -1. Un eror muy común consiste en intentar avanzar más allá de los límites del fichero.
#include <stdio.h>
#include <stdlib.h>
int main() { /* imprime un fichero de texto al revés */
FILE *fp;
long despl = 0L; /* cero "largo" */
char ch;
if ((fp = fopen("texto.txt", "r")) == NULL) {
puts("El fichero no puede abrirse.");
exit(1); /* aborta el programa con un código de error */
}
fseek(fp, --despl, SEEK_END);
/* sitúa el puntero justo antes del fin de fichero (EOF) */
while ((ch = getc(fp)) != EOF) {
putchar(ch);
fseek(fp, --despl, SEEK_END);
/* mueve el puntero un byte hacia atrás */
}
fclose(fp); /* los ficheros siempre deben cerrarse */
return 0;
}
fread(void *, unsigned, unsigned, FILE *);La función fwrite() escribe en un fichero binario referenciado por f (cuarto parámetro) n elementos (tercer parámetro) de tamaño t (segundo parámetro). Dichos elementos constituyen un bloque de datos que se encuentra en una zona de memoria referenciada por el puntero p (primer parámetro).
fwrite(void *, unsigned, unsigned, FILE *);Ejemplo 5.4. Escribir un programa que almacene los elementos de una matriz de dimensión 3x3 en un fichero denominado MATRIZ.TXT, y posteriormente recupere los datos guardados en dicho fichero y los asigne a otra matriz. Finalmente, el programa deberá mostrar en pantalla el contenido de esta segunda matriz que contiene los datos leídos del fichero.
#include <stdio.h
#include <stdlib.h>
int main() {
int i, j;
int matrizsal[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}},
matrizent[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
FILE *fich;
if ((fich = fopen("matriz.bin", "w")) == NULL) {
puts("Error en apertura del fichero.\n");
exit(1);
}
fwrite((void *) matrizsal, sizeof(int), 9, fich);
fclose(fich);
if ((fich = fopen("matriz.bin", "r")) == NULL) {
puts("Error en apertura del fichero.\n");
exit(2);
}
fread((void *) matrizent, sizeof(int), 9, fich);
fclose(fich);
printf("Elementos de la matriz recuperada del fichero.\n\n");
for (i = 0; i < 3; i++) {
printf(" [");
for (j = 0; j < 3; j++)
printf("%d ", matrizent[i][j]);
printf("\b]\n");
}
putchar('\n');
system("pause");
return 0;
}
int feof(FILE *);La función rewind() reinicializa el indicador de posición del archivo y lo sitúa al principio del mismo.
void rewind(FILE *);