Вы находитесь на странице: 1из 5

FICHEROS EN C

© 2002 Juan J. Martínez <jjm@usebox.net>


Se permite la copia textual y distribución de este documento en su totalidad, por cualquier medio,
siempre y cuando se mantenga esta nota de copyright.

Introducción
Las funciones básicas para manejar ficheros se encuentran en la librería de stdio.
Con dichas funciones se pueden realizar, entre otras, las siguientes acciones:
1. Crear un fichero
2. Leer y Escribir en un fichero
3. Abrir un fichero
4. Posicionarnos en el fichero y conocer su estado

Modos de acceso
Antes de realizar una operación sobre un fichero es necesario obtener un manejador que
nos permita referirnos a él (el fichero). Esto es porque la operación siempre se hace sobre
un fichero.
Dependiendo del modo de acceso con el que creemos el manejador, podremos realizar
unas operacions u otras sobre el fichero asociado:

Modo Operación
Lectura (r) Leer, posicionarnos, conocer su estado,
otros procesos pueden leer (depende del
sistema)
Escritura (r) Esctribir, posicionarnos, otros procesos no
pueden leer (fichero bloqueado)
Lectura/Escritura (r/w) Leer, posicionarnos, escribir, el fichero
está bloqueado

Admás de estos modos de acceso, C define otros especiales que añaden matices a las
operaciones a realizar. Ejemplo: a (append), abrir fichero para escritura posicionandonos
al final.
Funciones

#include <stdio.h>

Crear/cerrar manejador:
FILE * fopen(const char *path, const char *mode);
int fclose(FILE *stream);
Lectura/escritura binaria:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Lectura/escritura texto:
int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
Estado y posicionamiento:
int feof(FILE *stream);
int fseek(FILE *stream, long offset, int whence);

Crear/cerrar manejador

FILE * fopen(const char *path, const char *mode);


Devuelve un manejador para el fichero indicado en path. El manejador se abrirá con el
modo indicado por mode. En caso de error, devuelve NULL (que es (void *)0).

Modos de apertura:
“r” Lectura
“r+” Lectura/Ecritura, posicinado al principio del fichero
“w” Escritura, trunca el fichero a 0 bytes
“w+” Lectura/Escritura, trunca el fichero a 0 bytes
“a” Escritura, posicionado al final de fichero (append > añadir)
Además se comtempla la adición de los moficiadores b y t. b implica binario, y t implica
texto. La interpretación de este modificador depende de la plataforma donde corra el
programa y del compilador C que empleemos. Por lo general usaremos t cuando nos
refiramos a un fichero en texto (para usar las funciones de lectura/escritura para texto) y
b cuando sea binario y empleemos las funciones sorrecpondientes para ese modo.
Consultar man fopen para más información.
int fclose(FILE *stream);
Cierra un manejador de fichero previamente abierto. Es NECESARIO cerrar los ficheros
cuando se acaban de utilizar.

Lectura/escritura binaria

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);


La función fread lee nmemb objetos, cada uno de tamaño en bytes size, desde el fichero
apuntado por el manejador stream, y los almacena en la memoria apuntada por ptr.

El posicionado del fichero se desplaza tantos bytes como se hayan leido. La función
devuelve el número de objetos (no bytes) leídos, o un valor inferior si se llega al final de
fichero u ocurre un error (en ese caso puede devolver cero).

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
La función fwrite escribe nmemb objetos, cada uno de tamaño en bytes size, hacia el
fichero apuntado por el manejador stream, y obtiene los objetos de la memoria apuntada
por ptr.

El posicionado del fichero se desplaza tantos bytes como se hayan escrito. La función
devuelve el número de objetos (no bytes) escritos, o un valor inferior si ocurre un error.

Lectura/escritura texto

int fscanf(FILE *stream, const char *format, ...);


int fprintf(FILE *stream, const char *format, ...);
Funcionan exactamente igual que sus homónimas para leer/escribir en stdout/sdtin. De
hecho, stdio define tres manejadores de fichero por defecto:

Menajeador Descripción
stdin Entrada standard (habitualmente teclado)
stdout Salida standard (habitualmente pantalla)
stderr Error standard (habitualmente pantalla)

Para ver su funcionamiento consultar los apuntes Funciones de ANSI C (1).


Estado y posicionamiento

int feof(FILE *stream);


Devuelve el estado para el fichero apuntado por el majenador stream. Si se ha llegado al
final del fichero devuelve true (1), o false (0) en otro caso.

int fseek(FILE *stream, long offset, int whence);


Permite cambiar el posicionamiento en un fichero apuntado por stream. Se indica la
nueva posición mediante offset, dependiendo de whence.

whence Tipo de posicionamiento


SEEK_SET Relativo al principio del fichero
SEEK_CUR Relativo a la posición actual
SEEK_END Relativo al final del fichero

En caso de éxito la función devuelve el número de bytes que se ha desplazado el


posicionamiento, o −1 en caso de error.

Ejemplos

#include<stdio.h>

int
main() {

FILE *fd;
char buffer[32];

/* abrimos un fichero de texto para escritura, como no existe, se crea*/


fd=fopen(“fichero.txt”,”wt”);

/* si hay un error, fd==NULL, osea fd=(void *)0, que es lo mismo que */


/* decir que fd es falso */
if(!fd) {
printf(“Error abriendo el fichero\n”);
exit(−1);
}
/* escribimos una farse en el fichero */
fprintf(fd,”Escribiendo dentro del fichero.\n”);

/* lo cerramos */
fclose(fd);

/* lo abrimos otra vez, pero para lectura */


fd=fopen(“fichero.txt”,”rt”);
if(!fd) {
printf(“Error abriendo el fichero (2)\n”);
exit(−1);
}

/* nos posicionamos 12 bytes desde el pricipio del fichero */


/* eso nos situda delante de la palabra ’dentro’ */
fseek(fd, 12, SEEK_SET);

/* leemos 6 objetos de tamaño 1, es decir 6 bytes. Como 1 */


/* caracter es 1 byte, leemos la palabra ’dentro’ */
fread(buffer, 1, 6, fd);

fclose(fd);

printf(“leído: ’%s’\n\n”, buffer); /* salida −> leído: ’dentro’ */

/* se acabó */
return 1;
}

Última modificación: 10/02/03

Вам также может понравиться