Logo Studenta

Semana 12

¡Este material tiene más páginas!

Vista previa del material en texto

1
PROGRAMACIÓN Y 
FUNDAMENTOS DE ALGORÍTMICA
ARCHIVOS
AGENDA
 Introducción
 Archivo
 Clasificación
 Flujo o stream
 Variable Puntero a archivo
 Apertura de archivos
 Cierre de archivos
 Escritura
 Lectura
 Final de flujo
 Error en operación de archivo
 Grabación de datos en buffer
 Referencia del contenido de un buffer
 Ejemplo
2
INTRODUCCIÓN
 Muchas veces necesitamos almacenar cierta 
cantidad de datos de forma permanente. La 
memoria principal es volátil, escasa y cara. De 
modo que cuando necesitamos guardar nuestros 
datos durante cierto tiempo tenemos que recurrir a 
sistemas de almacenamiento externo (memoria 
secundaria).
3
ARCHIVO
 Un archivo es una secuencia de datos almacenados 
en un medio persistente que están disponibles para 
ser utilizados por un programa. Todos los archivos 
tienen un nombre y una ubicación dentro del sistema 
de archivos del sistema operativo.
 Los datos en un archivo siguen estando presentes 
después de que termina el programa que lo ha 
creado. Un programa puede guardar sus datos en 
archivos para usarlos en una ejecución 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 lógico. 
Todas las operaciones sobre un archivo se realizan a 
través del archivo lógico.
 Su tamaño sólo está limitado por el espacio libre 
disponible en el dispositivo correspondiente.
5
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 número de bytes especificado 
registrado en una estructura de datos.
 En C++, un archivo es un concepto lógico que puede 
aplicarse a muchas cosas desde archivos de disco hasta 
terminales. Un flujo está asociado con un archivo realizando 
una operación de apertura (open), entonces se pueden 
intercambiar la información entre él y el programa.
 Se separa un flujo de un archivo específico a través de la 
operación 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
CLASIFICACIÓN
a) Dependiendo de la dirección del flujo de datos:
- De entrada: los datos se leen por el programa 
desde el archivo.
- De salida: los datos se escriben por el 
programa hacia el archivo.
- De entrada/salida: los datos pueden ser 
escritos o leídos.
7
CLASIFICACIÓN
b) Dependiendo del tipo de valores permitidos a cada 
byte:
- De texto: están compuestos únicamente por 
textos, sólo caracteres.
- Binarios: contienen información de cualquier 
tipo, codificada en forma binaria para el 
propósito de almacenamiento y procesamiento 
en computadores.
8
CLASIFICACIÓN
c) Según el tipo de acceso:
- Archivos secuenciales: imitan el modo de 
acceso de los antiguos archivos secuenciales 
almacenados en cintas magnéticas.
- Archivos de acceso aleatorio: permiten 
acceder a cualquier punto de ellos para realizar 
lecturas y/o escrituras.
9
CLASIFICACIÓN
d) Según 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 tamaño constante.
- Mixtos: en ocasiones pueden crearse archivos que 
combinen los dos tipos de registros, algunos software 
usan registros de longitud constante, pero añade un 
registro especial de cabecera al principio para definir, 
entre otras cosas, el tamaño y el tipo de registros.
10
FLUJO, CORRIENTE O STREAM
 Los flujos dan canales de comunicación entre el 
archivo y el programa. Por ejemplo, el flujo de 
entrada estándar permite que un programa lea 
datos desde el teclado, el flujo de salida estándar 
permite que un programa imprima datos en la 
pantalla. 
 Un flujo se relaciona con un archivo utilizando una 
operación de apertura y se desliga del archivo con 
una operación de cierre.
11
TIPOS
a) Flujos de texto: es una secuencia de caracteres 
organizados en líneas terminadas por un carácter de 
nueva línea (en el estándar 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 
traducción de caracteres. Además, el número de 
bytes escritos (leídos) será el mismo que los 
encontrados en el dispositivo externo.
12
DECLARACIÓN DE VARIABLE PUNTERO DE
ARCHIVO
 Sintaxis : FILE *flujo
 Propósito : Identifica un archivo especifico de disco 
y se usa por su flujo asociado para dirigir cada una 
de las funciones de memoria intermedia de E/S al 
lugar donde se realizan las operaciones.
 Ejemplo : FILE *fichero;
 Un puntero de archivo es un puntero a la 
información que define varios aspectos del archivo, 
incluyendo su nombre, estado y posición actual. Un 
puntero de archivo es una variable de tipo FILE. 
Con objeto de leer o escribir archivos, el programa 
necesita utilizar punteros de archivo. 13
APERTURA DE ARCHIVOS
 Sintaxis : flujo = fopen(char *nombre, char *modo);
 Propósito : 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 función fopen() devuelve la dirección cero o 
NULL si la operación de apertura falla (por ejemplo 
un disco lleno o protegido contra escritura antes de 
comenzar a escribir en él), o un valor (dirección) 
distinto al correcto.
14
APERTURA DE ARCHIVOS
 Si la operación es correcta, a partir de este instante el 
archivo queda referido por el apuntador flujo hasta el 
momento en que se cierra.
 Los parámetros de entrada son:
a) nombre: es una cadena de caracteres que contiene 
un nombre de archivo válido para el sistema operativo 
y también pueden incluir la especificación del camino 
completo.
b) modo: es una cadena de caracteres que contiene el 
estado deseado de apertura y especifica el tipo de 
archivo que se abrirá o se creará uno nuevo y el tipo 
de dato que puede contener: texto (t) o binario (b). 15
MODO
16
Modo Significado 
“w” 
“r” 
“a” 
 
“wb” 
“rb” 
“ab” 
“w+” 
“r+” 
“a+” 
 
“w+b” 
“r+b” 
“a+b” 
“wt” 
“rt” 
“at” 
“w+t” 
“r+t” 
“a+t” 
Crear un nuevo archivo de texto para escritura (o se sobrescribe si ya existe) 
Abrir un archivo de texto para lectura (el archivo debe existir) 
Añadir a un archivo de texto (se abre para escritura y el cursor se sitúa al final del 
archivo. Si el fichero no existe, se crea) 
Crear un archivo binario para escritura 
Abrir un archivo binario para lectura 
Añadir a un archivo binario 
Crear un archivo nuevo para leer/escribir (o se sobrescribe si ya existe) 
Abrir un archivo para leer/escribir (el archivo debe existir) 
Añadir a un archivo para leer/escribir (el cursor se sitúa al final del fichero, Si el 
fichero no existe, se crea 
Crear un archivo binario para leer/escribir 
Abrir un archivo binario para leer/escribir 
Añadir a un archivo binario para leer/escribir 
Crear un archivo de texto para escribir 
Abrir un archivo de texto para leer 
Añadir a un archivo de texto 
Crear un archivo de texto para leer/escribir 
Abrir un archivo de texto para leer/escribir 
Añadir o crear a un archivo de texto para leer/escribir 
 
CIERRE DE ARCHIVOS
 Sintaxis : int fclose(FILE *flujo);
 Propósito : Cerrar un flujo que fue abierto por una llamada a 
fopen() y antes de abandonar el programa, finalizar su vínculo 
con nombre
 Ejemplo : 
fclose(fichero);
 Si fclose() devuelve un valor cero (0) significa que la operación 
de cierre se ha realizado con éxito. Si ha habido algúnerror, el 
valor de retorno es la constante EOF.
 Al cerrar un archivo almacena los datos que aún están en el 
buffer de memoria, y actualiza algunos datos de la cabecera del 
archivo que mantiene el sistema operativo. 
17
LECTURA DE ARCHIVOS
 Se puede usar la función de lectura (archivos abiertos en modo r):
 Sintaxis : 
int fread(void *puntero, int longitud, int registros, FILE *corriente);
 Propósito : Leer desde un flujo uno o más registros de una longitud 
constante, y los almacena en una dirección de memoria. Devuelve 
un valor menor o igual al número de datos leídos (no el número de 
bytes) y si está al final del archivo devuelve 0.
 Ejemplo : 
fread(dirección, tamaño, número, fichero);
 Los parámetros son: un puntero a la zona de memoria donde se 
almacenarán los datos leídos, la longitud de cada registro, el 
número de registros a leer y un puntero a la estructura FILE del 
archivo del que se hará la lectura. 18
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);
 Propósito : Escribir hacia un flujo uno o más registros de una 
longitud constante almacenados a partir de una dirección de 
memoria determinada. Devuelve un valor igual al número de 
registros escritos (no el número de bytes) o EOF en caso de error.
 Ejemplo : 
fwrite(dirección, longitud, número, fichero);
 Los parámetros son: un puntero a la zona de memoria donde se 
almacenarán los datos leídos, el tamaño de cada registro, el 
número de registros a leer y un puntero a la estructura FILE del 
archivo del que se hará la lectura.
19
FINAL DE UN FLUJO
 Sintaxis : int feof(FILE *flujo);
 Propósito : 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 sólo si no se ha alcanzado el fin del 
archivo. Se puede aplicar este método 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 
detecte el fin del archivo.
20
ERROR EN OPERACIÓN DE ARCHIVO
 Sintaxis : int ferror(FILE *flujo);
 Propósito : Determinar si una operación con 
archivos produce un error. Devuelve verdad si ha 
ocurrido un error durante la última operación de 
archivo y devuelve falso si tuvo éxito la operación.
 Ejemplo : 
ferror(fichero);
21
GRABACIÓN DE DATOS DE UN BUFFER
 Sintaxis : int fflush(FILE *corriente);
 Propósito : Forzar la grabación de los datos 
acumulados en el buffer de salida del archivo 
asociado a él. El valor de retorno es cero si la 
función se ejecutó con éxito, y EOF si hubo algún 
error. El parámetro 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
REFERENCIA DEL CONTENIDO DE UN FLUJO
 Sintaxis : int fseek(FILE *flujo, long int
desplazamiento, int origen);
 Propósito : Ubicar el cursor del archivo para leer o 
escribir, que referencia el contenido del flujo 
especificado, en la posición marcada por los 
argumentos de llamada. El valor de retorno es cero 
si la función tuvo éxito, y un valor distinto de cero si 
hubo algún error Se usa en las E/S de acceso 
directo.
 Ejemplo : 
fseek(fichero, 128, 0);
23
PARÁMETROS
 Los parámetros 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 parámetro 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 
posición actual del cursor.
 - SEEK_END o 2, el desplazamiento se cuenta desde el final 
del archivo.
 El desplazamiento es el número de bytes desde el origen 
hasta alcanzar la nueva posición.
24
EJEMPLO
25
PREGUNTAS
26
PROBLEMA
 En código que presentará el docente realice los 
cambios que indique.
27
EN RESUMEN
 Archivo
 Clases
 Apertura
 Cierre
 Lectura
 Escritura
28

Otros materiales

Materiales relacionados

338 pag.
Android, 2da Edición

SIN SIGLA

User badge image

matica121314

404 pag.
29 pag.
U07_Gestión de Objetos de Esquema

SIN SIGLA

User badge image

Florentina Aparicio