Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OBJETIVOS
• Dar a conocer las diversas formas de almacenamiento externo
de datos en la computadora.
• Dar las pautas necesarias para el tratamiento de archivos.
• Proporcionar las diferentes estructuras Sintácticas de la
gramática del lenguaje C en el manejo de Archivos.
METAS
• El alumno obtendrá habilidades en el manejo de Archivos
• El alumno será capas de resolver diferentes problemas sobre
la temática con eficiencia y eficacia.
CAMPO DE APLICACION
Construcción de sistemas que manejen datos completos de
instituciones como ser, manejo de planillas de sueldos,
manejo de bibliotecas, listas de alumnos y notas,
recuperación de gráficos en sus diferentes formatos y otras
referente al manejo de volúmenes de información.
SIS-1101 ING. CARLOS BALDERRAMA V. PAG. 1 DE 34
Necesidad de las memorias secundarias.
• La Memoria Principal es rápida pero cara, de poca capacidad y generalmente
volátil.
• La Memoria Secundaria es lenta pero barata, de alta capacidad y no volátil.
Para el procesamiento es necesario transferir la información a memoria principal.
Modo Significado
r Abre un archivo de texto para solo lectura. Si el archivo no existe, devuelve un error
w Abre el archivo de texto para solo escritura. Si el fichero no existe, lo crea, y si existe lo machaca.
a Abre el archivo de texto para añadir al final. Si el fichero no existe, lo crea.
r+ Abre el archivo de texto para lectura/escritura. Si el fichero no existe, da un error
w+ Abre el archivo de texto para lectura/escritura. Si el fichero no existe, lo crea, y si existe lo machaca.
a+ Abre el archivo de texto para añadir al final, con opción de lectura. Si el fichero no existe, lo crea.
rb Abre un archivo binario para solo lectura. Si el archivo no existe, devuelve un error
wb Abre el archivo binario para solo escritura. Si el fichero no existe, lo crea, y si existe lo machaca.
ab Abre el archivo binario para añadir al final. Si el fichero no existe, lo crea.
rb + Abre el archivo binario para lectura/escritura. Si el fichero no existe, da un error
wb + Abre el archivo binario para lectura/escritura. Si el fichero no existe, lo crea, y si existe lo machaca.
ab + Abre el archivo binario para añadir al final, con opción de lectura. Si el fichero no existe, lo crea.
Decir que los ficheros de texto se pueden referenciar también como "rt", "wt", "at", "rt+",
"wt+" y "at+", pero para facilitar más las cosas, cuando no especificamos si queremos abrir
un fichero de texto o binario, por defecto se supone que es de texto, es por ello que los
modos "r", "w" y "a" se refieren a ficheros de texto.
Valor
Si se necesitan cerrar varios ficheros a la vez, nos podemos ahorrar varios fclose utilizando
la funcion fcloseall.
fcloseall <numero_ficheros> = fcloseall();
Donde:
• numero_ficheros es una variable entera que indica el
número de ficheros cerrados, o EOF si ha ocurrido un error.
Su diagrama de Sintaxis es el siguiente:
= fcloseall ( ) ;
Valor
SIS-1101 ING. CARLOS BALDERRAMA V. PAG. 11 DE 34
PARA REALIZAR EL TRATAMIENTO DE LA INFORMACIÓN.
Ahora veamos una serie de funciones para escribir y leer datos de un fichero de texto.
putc : Esta función escribe un carácter en un fichero de texto. Devuelve un entero si la
escritura es correcta. De otra forma devuelve el valor EOF que indica que ha habido un
error. Su formato es:
putc (<carácter>, <var_fich>);
Donde: carácter es el carácter que se desea escribir en el fichero.
var_fich es la variable declarada como FILE.
putc ( carácter , var fich ) ;
getc : Esta función lee un carácter de un fichero de texto abierto en modo lectura. Devuelve
un entero si la lectura es correcta. De otra forma devuelve el valor EOF que indica que
hemos llegado al final del fichero. Su formato es:
<carácter> = getc (<var_fich>);
Donde: carácter es la variable que contendrá el carácter leído del fichero.
var_fich es la variable declarada como FILE.
putw
Esta función escribe un entero en un fichero binario. Su sintaxis es:
putw (<num_entero>, <var_fich>);
Donde: num_entero es el valor entero que se escribirá en el fichero.
var_fich es la variable declarada como FILE.
Ejemplos:
putw (5, fich);
i = 99; putw (i, fich);
fscanf ( , , ) ;
var fich cad de control lista variables
fprintf ( , , ) ;
var fich cad de control lista variables
feof : Esta función nos devuelve un número positivo si hemos llegado al final de un fichero
binario. De otro modo, nos devuelve un cero. Su sintaxis es:
<valor> = feof (<var_fich>);
Donde: valor es el valor que nos indica si ha llegado a final de fichero.
var_fich es la variable declarada como FILE.
ferror : Determina si una operación con archivos ha sido errónea o no. Si lo ha sido
devuelve un número positivo, y si no ha habido problema, devuelve un 0. Su sintaxis es:
<valor> = ferror (<var_fich>);
Donde: valor es el valor que nos indica si ha ocurrido un error.
var_fich es la variable declarada como FILE.
rewind ( var_fich ) ;
Por ejemplo, si estamos leyendo secuencialmente el fichero fich y vamos por el cuarto dato,
al hacer rewind(fich), volveríamos al principio del fichero y podríamos volver a leer el
primer dato, como si lo abriésemos de nuevo para lectura.
struct
{ int codigo;
char nomart[31];
float precio;
}articulo;
Es evidente que la longitud de cada registro es de 37 bytes (2+31+4 bytes). De esta forma,
la disposición de los registros dentro del fichero en disco se realiza en las siguientes
posiciones:
Esta función se suele usar, a parte de para saber la situación exacta en el fichero, para
obtener la longitud del mismo. Veamos un ejemplo:
...
if ((f=fopen("articul.dat", "rb")) == NULL)
{
printf ("Imposible crear fichero\n");
exit (1);
}
fseek (f, 0, 2); /* tambien puede ser fseek (f, 2, SEEK_END); */
l = ftell(f);
printf ("El fichero tiene un tamaño de %ld bytes\n", l);
printf ("Y un total de %ld registros\n", l/sizeof(reg));
/* donde reg sería la estructura o el dato simple contenido en el fichero */
...
La función fsetpos devuelve cero si no ocurre un error y un valor distinto a cero, en caso
contrario.
La función fgetpos devuelve cero si no ocurre un error y un valor distinto de cero, en caso
contrario.
void mostrar(void)
{ char nom[10];
//lectura de reales en estructuras pf=fopen("datos.dat","r");
void truco(void) while (!feof(pf))
{ float q,*s; {
s=&q; fread(&emp,sizeof(struct empleado),1,pf);
q=*s; mostraremp();
} }
fclose(pf);
}
SIS-1101 ING. CARLOS BALDERRAMA V. PAG. 28 DE 34
OPERACIONES QUE SE REALIZAN CON LOS DATOS
• La forma de dar de alta registros es igual que para el acceso secuencial. Se hará un
recorrido hasta llegar al final del fichero para comprobar que no existe el código del
registro a dar de alta, y en ese caso, se procede a hacer fwrite. Abriremos para ello el
fichero en modo añadir.
• Las bajas consisten en localizar el registro según un código, y escribir un registro vacío
en tal posición. Para ello tendremos que abrir el fichero en modo lectura/escritura, o
sea, "r+".
• Las modificaciones, de forma similar a las bajas pero escribiendo en el lugar
correspondiente el registro modificado que reemplace al actual.
• Las consultas no son otra cosa que un acceso directo al código indicado.
• Y por último los listados, que consisten en un recorrido secuencial desde el primer
registro hasta el último.
void main(void)
{
int driver,modo;
detectgraph(&driver,&modo);
initgraph(&driver,&modo,"e:\\borlandc\\bgi");
leer_archi("splash.bmp");
getch();
closegraph();
}