ficheros en c
hola! necesito ejercicios en c sobre ficheros binarios, ficheros de texto o / y la combinacion de ambos. si alguien me puede pasar, le estaria agradecido. gracias de todas formas!
9. Manejo de ficheros básico con stdio.h
La biblioteca STDIO contiene funciones para trabajar con ficheros: básicamente leer y escribir datos de diferentes formas.
Antes de trabajar con un fichero, hay que abrirlo. Cuando se abre un fichero, se devuelve un puntero a una estructura de tipo FILE (definido en STDIO). Esta estructura, llamada descriptor de fichero , servirá para manipular posteriormente el fichero.
Tras su uso, hay que cerrar el fichero.
Modelo de uso:
FILE* fd; /* variable para apuntar al descriptor de fichero */
...
/* abre el fichero en modo lectura */
fd = fopen ( "pepe.txt", "rt" );
... trabaja con el fichero ...
fclose (fd); /* cierra el fichero */
Muchas de las funciones de STDIO para trabajar con ficheros comienzan por la letra "f" (fopen, fclose, fprintf, fwrite, etc.)
.2 Abrir y cerrar un fichero
Abrir un fichero
fd = fopen ( nombre, modo );
Devuelve NULL si no se pudo abrir correctamente el fichero.
nombre es el nombre del fichero.
modo es una cadena donde se define el modo de apertura:
r sólo lectura
w escritura
a apéndice (escribir desde el final)
+ (combinado con r,w ó a) lectura/escritura
t fichero de texto
b fichero binario
Ejemplo:
fd = fopen ( "c:\ejemplos\fichero.txt", "r+t" );
abre el fichero c:ejemplosfichero.txt en modo lectura/escritura y en modo texto. Obsérvese que las barras en el nombre del fichero tienen que escribirse duplicadas.
Un fichero abierto en modo texto convierte la combinación CR+LF en un carácter de salto de línea. Si es binario, CR+LF se consideran dos caracteres independientes.
Cerrar un fichero
fclose ( fd );
donde fd es un descriptor de fichero ya abierto.
.3 Leer una cadena desde un fichero
fgets ( cadena, N, fd );
Lee una línea de texto.
cadena es el vector de caracteres donde se depositará la línea.
N es el máximo número de caracteres para leer. Si la línea ocupa más de N caracteres, sólo se lee esa cantidad.
fd es el descriptor del fichero.
Cuando se abre un fichero, se comienza a leer desde la primera línea. Llamadas consecutivas a fgets van leyendo línea por línea. Si se cierra el fichero y se vuelve a abrir, se lee otra vez desde el principio.
Internamente existe un puntero del fichero que apunta a la posición relativa al fichero donde se va a leer el siguiente dato.
9.4 Escribir una cadena en un fichero
fputs ( cadena, fd );
cadena es el texto que se escribe. fputs incluye además un salto de línea.
fd es el descriptor del fichero.
Las líneas escritas se van añadiendo una detrás de otra. Se comienza por el principio del fichero ( w) o por el final ( a). También existe internamente un puntero de fichero para escritura.
fprintf ( fd, formato, arg1, arg2, ... );
Escribe un texto con formato en un fichero. La sintaxis es idéntica a printf, salvo que el primer argumento es un descriptor de fichero.
9.5 Detectar el final de fichero
x = feof ( fd );
Devuelve un 1 si se ha llegado al final del fichero. Un cero en caso contrario.
Útil para saber cuándo dejar de leer información, por ejemplo.
9.6 Reposicionar el puntero del fichero
rewind ( fd );
Mueve el puntero de lectura/escritura del fichero al comienzo del mismo (rebobina).
fseek ( fd, posición, de_dónde );
Mueve el puntero del fichero a la posición indicada, relativa a un punto especificado en de_dónde.
posición es de tipo long.
de_dónde puede tener los siguientes valores:
SEEK_SET desde el origen del fichero
SEEK_CUR desde la posición actual del puntero
SEEK_END desde el final del fichero
Ejemplo
FILE* fich;
char cadena [16];
/* lee los últimos 15 caracteres del fichero */
fich = fopen ( "fichero.txt", "rt" );
fseek ( fd, -15L, SEEK_END);
fgets ( texto, 15, fich );
fclose (fich);
9.7 Flujos (streams) estándares
Los ficheros de donde se lee o escribe información con las rutinas de STDIO se llaman flujos o streams. Un flujo puede ser un fichero, pero también el teclado (se puede leer de él) o la pantalla (se puede escribir en ella).
Los llamados flujos estándares son estos:
stdin entrada estándar (normalmente el teclado)
stdout salida estándar (normalmente la pantalla)
stderr error estándar (normalmente la pantalla)
Se pueden utilizar con las funciones de STDIO:
fgets ( cadena, 80, stdin );
fprintf (stderr,"Se ha producido un error" );
Los flujos estándares se
9.8 Gestión de errores: errno
Muchas funciones de biblioteca devuelven un -1 o un NULL si ocurre un error. Esto es habitual en las funciones de tratamiento de ficheros.
La variable errno contiene un código de error relativo al último error producido. Para trabajar con errno hay que incluir el fichero errno.h
En errno.h están definidos todos los códigos de error posibles.
Aparte, existe la función perror(), que da un mensaje (en inglés) sobre el error producido.
La biblioteca STDIO contiene funciones para trabajar con ficheros: básicamente leer y escribir datos de diferentes formas.
Antes de trabajar con un fichero, hay que abrirlo. Cuando se abre un fichero, se devuelve un puntero a una estructura de tipo FILE (definido en STDIO). Esta estructura, llamada descriptor de fichero , servirá para manipular posteriormente el fichero.
Tras su uso, hay que cerrar el fichero.
Modelo de uso:
FILE* fd; /* variable para apuntar al descriptor de fichero */
...
/* abre el fichero en modo lectura */
fd = fopen ( "pepe.txt", "rt" );
... trabaja con el fichero ...
fclose (fd); /* cierra el fichero */
Muchas de las funciones de STDIO para trabajar con ficheros comienzan por la letra "f" (fopen, fclose, fprintf, fwrite, etc.)
.2 Abrir y cerrar un fichero
Abrir un fichero
fd = fopen ( nombre, modo );
Devuelve NULL si no se pudo abrir correctamente el fichero.
nombre es el nombre del fichero.
modo es una cadena donde se define el modo de apertura:
r sólo lectura
w escritura
a apéndice (escribir desde el final)
+ (combinado con r,w ó a) lectura/escritura
t fichero de texto
b fichero binario
Ejemplo:
fd = fopen ( "c:\ejemplos\fichero.txt", "r+t" );
abre el fichero c:ejemplosfichero.txt en modo lectura/escritura y en modo texto. Obsérvese que las barras en el nombre del fichero tienen que escribirse duplicadas.
Un fichero abierto en modo texto convierte la combinación CR+LF en un carácter de salto de línea. Si es binario, CR+LF se consideran dos caracteres independientes.
Cerrar un fichero
fclose ( fd );
donde fd es un descriptor de fichero ya abierto.
.3 Leer una cadena desde un fichero
fgets ( cadena, N, fd );
Lee una línea de texto.
cadena es el vector de caracteres donde se depositará la línea.
N es el máximo número de caracteres para leer. Si la línea ocupa más de N caracteres, sólo se lee esa cantidad.
fd es el descriptor del fichero.
Cuando se abre un fichero, se comienza a leer desde la primera línea. Llamadas consecutivas a fgets van leyendo línea por línea. Si se cierra el fichero y se vuelve a abrir, se lee otra vez desde el principio.
Internamente existe un puntero del fichero que apunta a la posición relativa al fichero donde se va a leer el siguiente dato.
9.4 Escribir una cadena en un fichero
fputs ( cadena, fd );
cadena es el texto que se escribe. fputs incluye además un salto de línea.
fd es el descriptor del fichero.
Las líneas escritas se van añadiendo una detrás de otra. Se comienza por el principio del fichero ( w) o por el final ( a). También existe internamente un puntero de fichero para escritura.
fprintf ( fd, formato, arg1, arg2, ... );
Escribe un texto con formato en un fichero. La sintaxis es idéntica a printf, salvo que el primer argumento es un descriptor de fichero.
9.5 Detectar el final de fichero
x = feof ( fd );
Devuelve un 1 si se ha llegado al final del fichero. Un cero en caso contrario.
Útil para saber cuándo dejar de leer información, por ejemplo.
9.6 Reposicionar el puntero del fichero
rewind ( fd );
Mueve el puntero de lectura/escritura del fichero al comienzo del mismo (rebobina).
fseek ( fd, posición, de_dónde );
Mueve el puntero del fichero a la posición indicada, relativa a un punto especificado en de_dónde.
posición es de tipo long.
de_dónde puede tener los siguientes valores:
SEEK_SET desde el origen del fichero
SEEK_CUR desde la posición actual del puntero
SEEK_END desde el final del fichero
Ejemplo
FILE* fich;
char cadena [16];
/* lee los últimos 15 caracteres del fichero */
fich = fopen ( "fichero.txt", "rt" );
fseek ( fd, -15L, SEEK_END);
fgets ( texto, 15, fich );
fclose (fich);
9.7 Flujos (streams) estándares
Los ficheros de donde se lee o escribe información con las rutinas de STDIO se llaman flujos o streams. Un flujo puede ser un fichero, pero también el teclado (se puede leer de él) o la pantalla (se puede escribir en ella).
Los llamados flujos estándares son estos:
stdin entrada estándar (normalmente el teclado)
stdout salida estándar (normalmente la pantalla)
stderr error estándar (normalmente la pantalla)
Se pueden utilizar con las funciones de STDIO:
fgets ( cadena, 80, stdin );
fprintf (stderr,"Se ha producido un error" );
Los flujos estándares se
9.8 Gestión de errores: errno
Muchas funciones de biblioteca devuelven un -1 o un NULL si ocurre un error. Esto es habitual en las funciones de tratamiento de ficheros.
La variable errno contiene un código de error relativo al último error producido. Para trabajar con errno hay que incluir el fichero errno.h
En errno.h están definidos todos los códigos de error posibles.
Aparte, existe la función perror(), que da un mensaje (en inglés) sobre el error producido.
