Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Archivos
1
AGENDA
Pseudocdigo
Introduccin
Archivo
Clasificacin
Flujo o stream
Variable Puntero a archivo
Apertura de archivos
Cierre de archivos
Escritura
Lectura
Final de flujo
Error en operacin de archivo
Grabacin de datos en buffer
Referencia del contenido de un buffer 2
Ejemplo
INTRODUCCIN
Muchas veces necesitamos almacenar cierta
cantidad de datos de forma permanente. La
memoria principal es voltil, escasa y cara. De
modo que cuando necesitamos guardar nuestros
datos durante cierto tiempo tenemos que recurrir a
sistemas de almacenamiento externo (memoria
secundaria).
1
ARCHIVO
Un archivo es una secuencia de datos almacenados
en un medio persistente que estn disponibles para
ser utilizados por un programa. Todos los archivos
tienen un nombre y una ubicacin dentro del sistema
de archivos del sistema operativo.
Los datos en un archivo siguen estando presentes
despus de que termina el programa que lo ha
creado. Un programa puede guardar sus datos en
archivos para usarlos en una ejecucin futura, e
incluso puede leer datos desde archivos creados por
otros programas.
4
ARCHIVO
Un programa no puede manipular los datos de un
archivo directamente. Para usar un archivo, un
programa siempre debe abrir el archivo y asignarlo a
una variable, que llamaremos el archivo lgico.
Todas las operaciones sobre un archivo se realizan a
travs del archivo lgico.
Su tamao slo est limitado por el espacio libre
disponible en el dispositivo correspondiente.
ARCHIVOS EN C++
C ve cada uno de los archivos simplemente como un grupo
secuencial de bytes. Cada archivo termina con un marcador
de fin de archivo o un nmero de bytes especificado
registrado en una estructura de datos.
En C++, un archivo es un concepto lgico que puede
aplicarse a muchas cosas desde archivos de disco hasta
terminales. Un flujo est asociado con un archivo realizando
una operacin de apertura (open), entonces se pueden
intercambiar la informacin entre l y el programa.
Se separa un flujo de un archivo especfico a travs de la
operacin close. Al salir de un archivo abierto, el cierre
provoca que si hay contenidos de su flujo asociado, se
escriban en el dispositivo externo. 6
2
CLASIFICACIN
a) Dependiendo de la direccin del flujo de datos:
CLASIFICACIN
b) Dependiendo del tipo de valores permitidos a cada
byte:
CLASIFICACIN
c) Segn el tipo de acceso:
3
CLASIFICACIN
d) Segn la longitud de registro:
- Longitud variable: en estos archivos cada registro es de
longitud diferente; en realidad, en este tipo de archivos no
tiene sentido hablar de longitud de registro, podemos
considerar cada byte como un registro.
- Longitud constante: en estos archivos los datos se
almacenan en forma de registro de tamao constante.
- Mixtos: en ocasiones pueden crearse archivos que
combinen los dos tipos de registros, algunos software
usan registros de longitud constante, pero aade un
registro especial de cabecera al principio para definir,
entre otras cosas, el tamao y el tipo de registros.
10
11
TIPOS
a) Flujos de texto: es una secuencia de caracteres
organizados en lneas terminadas por un carcter de
nueva lnea (en el estndar ANSI es opcional).
b) Flujos binarios: es una secuencia de bytes que
tienen una correspondencia uno a uno con un
dispositivo externo. As que no tendr lugar ninguna
traduccin de caracteres. Adems, el nmero de
bytes escritos (ledos) ser el mismo que los
encontrados en el dispositivo externo.
12
4
DECLARACIN DE VARIABLE PUNTERO DE
ARCHIVO
APERTURA DE ARCHIVOS
Sintaxis : flujo = fopen(char *nombre, char *modo);
Propsito : Abrir un flujo para enlazar un archivo
con un flujo y retornar el puntero de archivo
asociado con un archivo.
Ejemplo :
archivo = fopen(d:ficha.dat,w);
La funcin fopen() devuelve la direccin cero o
NULL si la operacin de apertura falla (por ejemplo
un disco lleno o protegido contra escritura antes de
comenzar a escribir en l), o un valor (direccin)
distinto al correcto.
14
APERTURA DE ARCHIVOS
Si la operacin es correcta, a partir de este instante el
archivo queda referido por el apuntador flujo hasta el
momento en que se cierra.
Los parmetros de entrada son:
5
MODO
Modo Significado
w Crear un nuevo archivo de texto para escritura (o se sobrescribe si ya existe)
r Abrir un archivo de texto para lectura (el archivo debe existir)
a Aadir a un archivo de texto (se abre para escritura y el cursor se sita al final del
archivo. Si el fichero no existe, se crea)
wb Crear un archivo binario para escritura
rb Abrir un archivo binario para lectura
ab Aadir a un archivo binario
w+ Crear un archivo nuevo para leer/escribir (o se sobrescribe si ya existe)
r+ Abrir un archivo para leer/escribir (el archivo debe existir)
a+ Aadir a un archivo para leer/escribir (el cursor se sita al final del fichero, Si el
fichero no existe, se crea
w+b Crear un archivo binario para leer/escribir
r+b Abrir un archivo binario para leer/escribir
a+b Aadir a un archivo binario para leer/escribir
wt Crear un archivo de texto para escribir
rt Abrir un archivo de texto para leer
at Aadir a un archivo de texto
w+t Crear un archivo de texto para leer/escribir
r+t Abrir un archivo de texto para leer/escribir
a+t Aadir o crear a un archivo de texto para leer/escribir 16
CIERRE DE ARCHIVOS
Sintaxis : int fclose(FILE *flujo);
Propsito : Cerrar un flujo que fue abierto por una llamada a
fopen() y antes de abandonar el programa, finalizar su vnculo
con nombre
Ejemplo :
fclose(fichero);
LECTURA DE ARCHIVOS
Se puede usar la funcin de lectura (archivos abiertos en modo r):
Sintaxis :
int fread(void *puntero, int longitud, int registros, FILE *corriente);
Propsito : Leer desde un flujo uno o ms registros de una longitud
constante, y los almacena en una direccin de memoria. Devuelve
un valor menor o igual al nmero de datos ledos (no el nmero de
bytes) y si est al final del archivo devuelve 0.
Ejemplo :
6
ESCRITURA DE ARCHIVOS
Para escribir en un archivo (abierto en los modos w o a) se
puede utilizar:
Sintaxis :
int fwrite(void *puntero, int longitud, int registros, FILE *flujo);
Propsito : Escribir hacia un flujo uno o ms registros de una
longitud constante almacenados a partir de una direccin de
memoria determinada. Devuelve un valor igual al nmero de
registros escritos (no el nmero de bytes) o EOF en caso de error.
Ejemplo :
fwrite(direccin, longitud, nmero, fichero);
Los parmetros son: un puntero a la zona de memoria donde se
almacenarn los datos ledos, el tamao de cada registro, el
nmero de registros a leer y un puntero a la estructura FILE del 19
archivo del que se har la lectura.
FINAL DE UN FLUJO
Sintaxis : int feof(FILE *flujo);
Propsito : Comprobar si se ha llegado al final de un flujo,
en una lectura que efectuamos en ste. El valor de retorno
es distinto de cero slo si no se ha alcanzado el fin del
archivo. Se puede aplicar este mtodo tanto para los
archivos de texto como a los binarios.
Ejemplo :
feof(fichero);
Muy frecuentemente deberemos trabajar con todos los
valores almacenados en un archivo de forma secuencial, la
forma que suelen tener los bucles para leer todos los datos
de un archivo es permanecer leyendo mientras no se
20
detecte el fin del archivo.
ferror(fichero);
21
7
GRABACIN DE DATOS DE UN BUFFER
Sintaxis : int fflush(FILE *corriente);
Propsito : Forzar la grabacin de los datos
acumulados en el buffer de salida del archivo
asociado a l. El valor de retorno es cero si la
funcin se ejecut con xito, y EOF si hubo algn
error. El parmetro de entrada es un puntero a la
estructura FILE del archivo del que se quiere vaciar
el buffer. Si es NULL se har el vaciado de todos
los archivos abiertos
Ejemplo :
fflush(fichero);
22
PARMETROS
Los parmetros de entrada son: un puntero a una estructura
FILE del archivo en el que queremos cambiar el cursor de
lectura/escritura, el valor del desplazamiento y el punto de
origen desde el que se calcular el desplazamiento.
El parmetro origen puede tener tres posibles valores:
- SEEK_SET o 0, el desplazamiento se cuenta desde el
principio del archivo. El primer byte del archivo tiene un
desplazamiento cero.
- SEEK_CUR o 1, el desplazamiento se cuenta desde la
posicin actual del cursor.
- SEEK_END o 2, el desplazamiento se cuenta desde el final
del archivo.
El desplazamiento es el nmero de bytes desde el origen
24
hasta alcanzar la nueva posicin.
8
EJEMPLO
25