SISTEMAS DE ARCHIVOS

 

El “Sistema de Archivos” es la parte del sistema de administración del almacenamiento responsable, principalmente, de la administración de los archivos del almacenamiento secundario.

Es la parte del S. O. responsable de permitir “compartir controladamente” la información de los archivos.

 

Función de  sistemas de archivos

 

Los usuarios deben poder crear, modificar y borrar archivos.

 

Se deben poder compartir los archivos de una manera cuidadosamente controlada.

 

El mecanismo encargado de compartir los archivos debe proporcionar varios tipos de acceso controlado:

 

Ej.: “Acceso de Lectura”, “Acceso de Escritura”, “Acceso de Ejecución”, varias combinaciones de estos, etc.

Se debe poder estructurar los archivos de la manera más apropiada a cada aplicación.

Los usuarios deben poder ordenar la transferencia de información entre archivos.

 

Se deben proporcionar posibilidades de “respaldo” y “recuperación” para prevenirse contra:

 

La pérdida accidental de información.

La destrucción maliciosa de información.

Se debe poder referenciar a los archivos mediante “Nombres Simbólicos”, brindando “Independencia de Dispositivos”.

En ambientes sensibles, el sistema de archivos debe proporcionar posibilidades de “Cifrado” y “Descifrado”.

 

El sistema de archivos debe brindar una interfase favorable al usuario:

 

Debe suministrar una “visión lógica” de los datos y de las funciones que serán ejecutadas, en vez de una “visión física”.

El usuario no debe tener que preocuparse por:

Los dispositivos particulares.

Dónde serán almacenados los datos.

El formato de los datos en los dispositivos.

Los medios físicos de la transferencia de datos hacia y desde los dispositivos

 

ARCHIVO

 

Es una colección de registros lógicamente relacionados. , un registro  es una estructura de campos o de elementos  de información lógicamente relacionados. Por lo regular todos los archivo tienen un formato único, que aunque  estudiaremos  algunos ejemplos de archivos con múltiples formatos de registro. Generalmente, los registros  de un archivos se almacenan  juntos para algún propósito común, por ejemplo, apoyar un proceso de nomina  o registrar percepciones y descuentos al sueldos  de empleados o contener la información de inventarios, recolectar  datos para un experimento científico, o un modelo desarrollado utilizando un sistema de diseño asistido por computadora. Los archivos  grabados en cintas o discos magnéticos pueden ser guardados en cintotecas y posteriormente recuperados para ser accesados por programas y usuarios que los demanden.

 

ATRIBUTOS DE ARCHIVO

 

Cada archivo tiene:

 

Su nombre y datos.

Elementos adicionales llamados atributos, que varían considerablemente de sistema a sistema.

Algunos de los posibles atributos de archivo son [23, Tanenbaum]:

“Protección”: quién debe tener acceso y de qué forma.

“Contraseña”: contraseña necesaria para acceder al archivo.

“Creador”: identificador de la persona que creó el archivo.

“Propietario”: propietario actual.

“Bandera exclusivo - para - lectura”: 0 lectura / escritura, 1 para lectura exclusivamente.

“Bandera de ocultamiento”: 0 normal, 1 para no exhibirse en listas.

“Bandera de sistema”: 0 archivo normal, 1 archivo de sistema.

“Bandera de biblioteca”: 0 ya se ha respaldado, 1 necesita respaldo.

“Bandera ascii / binario”: 0 archivo en ascii, 1 archivo en binario.

“Bandera de acceso aleatorio”: 0 solo acceso secuencial, 1 acceso aleatorio.

“Bandera temporal”: 0 normal, 1 eliminar al salir del proceso.

“Banderas de cerradura”: 0 no bloqueado, distinto de 0 bloqueado.

“Longitud del registro”: número de bytes en un registro.

“Posición de la llave”: ajuste de la llave dentro de cada registro.

“Longitud de la llave”: número de bytes en el campo llave.

“Tiempo de creación”: fecha y hora de creación del archivo.

“Tiempo del último acceso”: fecha y hora del último acceso al archivo.

“Tiempo de la última modificación”: fecha y hora de la última modificación al archivo.

“Tamaño actual”: número de bytes en el archivo.

“Tamaño máximo”: tamaño máximo al que puede crecer el archivo.

 

ESTRUCTURA DE UN ARCHIVO

 

Los archivos se pueden estructurar de varias maneras, las más comunes son:

 

“Secuencia de bytes”:

El archivo es una serie no estructurada de bytes.

Posee máxima flexibilidad.

El S. O. no ayuda pero tampoco estorba.

“Secuencia de registros”:

El archivo es una secuencia de registros de longitud fija, cada uno con su propia estructura interna.

“Árbol ”:

El archivo consta de un árbol de registros, no necesariamente de la misma longitud.

Cada registro tiene un campo key (llave o clave) en una posición fija del registro.

El árbol se ordena mediante el campo de clave para permitir una rápida búsqueda de una clave particular.

 

CLASIFICACIÓN  DE ARCHIVOS POR FUNCIÓN

 

Existen  seis tipos básicos de archivos, clasificados por la función que desempeñan en un sistema de información:

 

1.- Un archivo maestro: representa una visión  estática de algún  aspecto de los negocios de una organización en un momento dado. Por ejemplo una organización de manufactura  puede tener un archivo maestro de nomina, un archivo  maestro de clientes, un archivo maestro de personal, un maestro de inventario, de requerimiento de material y otros.

 

2.- Un archivos de tracciones: una transacción  puede contener  datos para agregar un nuevo registro o para borra o modificar un registro  existente en un archivo maestro. Cada registro en un archivo  de transacciones representa un evento o cambio de alguna cosa, cuyo estatus es registrado en un archivo maestro.

 

3.- Un archivo de reporte: contiene datos  que son formateados para su  presentación  al usuario. El archivo puede enviarse a la cola de impresión para ser impreso, o bien puede exhibirse en la pantalla de una terminal. Un paquete escritor de reporte o un programa  de aplicación puede  producir un archivo de reporte.

 

4.- Un archivo de trabajo: es un archivo temporal en el sistema. No tiene las características de entrada/salida de un archivo de transacciones o de reporte, ni las de largo plazo del archivo maestro. El archivo de trabajo se usa comúnmente para pasar datos creados por un programa.

5.- Un archivo de programa: contiene instrucciones para procesar datos, los cuales pueden almacenarse en otros archivos o residir  en la memoria principal. Las instrucciones pueden estar escritas en un leguajes de alto nivel (por ejemplo cobol y pascal), en lenguaje  ensamblador, el lenguaje máquina o en un lenguaje de control de tareas. Las instrucciones pueden estar bajo la forma de código fuente o pueden ser le resultado de una compilación  de un ligado de una interpretación  o de otro proceso.

 

6.-  Un archivo de texto: contiene datos alfanuméricos  y gráficos  ingresados a través de un programa  editor de textos. Se pueden procesar  un archivo texto solamente por ese editor de texto, o se podría almacenar de tal forma que pueda procesarse por varios editores.

Considere el sistema ejemplificado en el diagrama de flujo de la figura 10-1- este sistema es un  sistema rudimentario de nomina que eventualmente produce cheques de pago  a partir de las tarjetas del empleado y de información de nomina. La siguiente tabla  muestra los nombres de cada archivo y su función  en el sistema de información. La ejecución  real de este sistema generalmente puede involucra  el uso de otros archivos que contengan, por ejemplo, datos del sistema de auditoria, diagnósticos, datos de  contabilidad, códigos del programa ejecutable, e instrucciones de control de tareas.

 

ARCHIVO

FUNCIÓN

TARJETAS DE ASISTENCIA

TRANSACCIÓN

PROGRAMA PARA ORDENAR

PROGRAMA

ARCHIVO DE TRABAJO PARA EL ORDENAMIENTO

TRABAJO

TARJETAS DE ASISTENCIA ORDENADAS

TRANSACCIÓN

ARCHIVO MAESTRO DE NOMINA

MAESTRO

PROGRAMA DE ACTUALIZACIÓN DE REGISTRO DE PAGO

PROGRAMA

TARJETA DE ASISTENCIA RECHAZADAS

TRABAJO

DETALLE DE CHEQUE DE PAGO

TRABAJO

DETALLE DE CONCILIACIÓN

TRABAJO

PROGRAMA DE LISTA  UTILIDADES

PROGRAMA

REPORTE  DE RECHAZOS

REPORTE

PROGRAMA PARA IMPRIMIR CHEQUES DE PAGO

PROGRAMA

CHEQUES DE PAGO

REPORTE

PROGRAMA PAR IMPRIMIR REPORTE DE   CONCILIACIÓN

PROGRAMA

REPORTE DE CONCILIACIÓN

REPORTE

 

ACCESO A UN ARCHIVO

 

Los tipos de acceso más conocidos son:

 

Acceso Secuencial: el proceso lee en orden todos los registros del archivo comenzando por el principio, sin poder:

Saltar registros.

Leer en otro orden.

Acceso Aleatorio: el proceso puede leer los registros en cualquier orden utilizando dos métodos para determinar el punto de inicio de la lectura:

Cada operación de lectura (read) da la posición en el archivo con la cual iniciar.

Una operación especial (seek) establece la posición de trabajo pudiendo luego leerse el archivo secuencialmente.

 

Otra forma de clasificar el uso de  un archivo en un sistema de información es de acuerdo con la manera  en la cual un programa particular  accesa el archivo. Existen tres modos  posibles de acceso de un programa a un archivo:

 

ü          ENTRADA

ü          SALIDA

ü          ENTRADA/SALIDA

 

Un archivo de entrada  es escritor solamente por un programa, es decir, es creado por el programa. Por ejemplo, un archivo   de reporte  puede se la salida de un programa  que actualiza un archivo  maestro. Un archivo de programa den código/objeto es un archivo de salida de programa  compilador.

Un archivo de entrada/salida es leído y escrito durante la ejecución de un programa. Por ejemplo, el archivo maestro de nomina podría ser usado por el programa  de nomina tanto ser leído, como una fuente de información sobre  los sueldo  del empleado, como para registra los pagos totales mensuales y anuales a la fecha. Un  archivo  de entrada/salida se podría crear por alguna fase de programa. Un archivo  maestro  es normalmente un archivo de entrada/salida como  los son los archivos de trabajo de los programas  de ordenamiento.

 

ORGANIZACIONES DE ARCHIVOS

 

La técnica utilizad para representar  y almacena registro en archivos e llamada organización de archivos. Las cuatro técnicas fundamentales de organización de archivos son:

 

ü          Secuénciales

ü          Relativa

ü          Secuencial indexado

ü          Multi-llave

 

Hay  dos aspectos básicos en que difieren las técnicas de organización de archivos. Primero, la organización determina la secuenciación de los registro del archivo, la cual es la ordenación física de los registro almacenados.

Los discos  magnéticos  son un ejemplo de dispositivos de almacenamiento  de acceso directo.  Las  cintas magnéticas son  ejemplos  de dispositivos de almacenamiento  secuencial.

 

OPERACIONES SOBRE ARCHIVOS

 

Las operaciones  básicas que se ejecutan  sobre los archivos son las siguientes:

 

1.- creación

2.- Actualización, incluyendo:

     Inserción de registro

     Modificación de registro

     Supresión de registro

3.- Recuperación, incluyendo:

     Consulta

     Generación de reportes

4.- Mantenimiento, incluyendo:

     Estructuración

     Reorganización

 

CREACIÓN DE UN ARCHIVO

 

La creación inicial de un archivo es  conocida también con la carga del archivo. El grueso del trabajo es la creación  de archivos  de transacción y archivos maestros incluye la captura y validación de datos. En algunas  implantaciones, primero  se asigna el espacios para el archivo y después los datos son cargados dentro de ese esqueleto de archivo. En otras implantaciones, el archivo se construye registro por registro. En muchos casos, los datos se cargan  e n un   archivo  de transacciones o archivo maestro por lotes, que cuando el archivo realmente  se construya registro por registro. Carga  un archivo  maestro  interactivamente puede tomar demasiado tiempo y mucho  trabajo si el volumen de datos es muy grande.

 

El contenido de un archivo  maestro  representa  un momento  transitorio del mundo  real representado por el archivo. Por el ejemplo, el archivo  maestro nomina, representa el estado actual de la situación de la nómina de una compañía por ejemplo campos mensuales y anúdeles a la fecha  indican apropiadamente  cantidades de pago acumuladas, vacaciones  tomadas, vacaciones por tomar, etc., para cada empleado.

 

RESPALDO Y RECUPERACIÓN

 

La destrucción de la información, ya sea accidental o intencional, es una realidad y tiene distintas causas [7, Deitel]:

 

Fallas de hardware y de software.

Fenómenos meteorológicos atmosféricos.

Fallas en el suministro de energía.

Incendios e inundaciones.

Robos, vandalismo (incluso terrorismo).

Etc.

Esta posible destrucción de la información debe ser tenida en cuenta por:

Los sistemas operativos en general.

Los sistemas de archivos en particular.

Una técnica muy usada para asegurar la disponibilidad de los datos es realizar respaldos periódicos:

Hacer con regularidad una o más copias de los archivos y colocarlas en lugar seguro.

Todas las actualizaciones realizadas luego del último respaldo pueden perderse.

Otra técnica es pasar todas las transacciones a un archivo, copiándolas en otro disco:

Genera una redundancia que puede ser costosa.

En caso de fallas en el disco principal, puede reconstruirse todo el trabajo perdido si el disco de reserva no se dañó también.

También existe la posibilidad del respaldo incremental:

Durante una sesión de trabajo los archivos modificados quedan marcados.

Cuando un usuario se retira del sistema (deja de trabajar), un proceso del sistema efectúa el respaldo de los archivos marcados.

Se debe tener presente que es muy difícil garantizar una seguridad absoluta de los archivos.

 

ARCHIVO DE TEXTO Y BINARIO

Básicamente se puede hablar de dos tipos de fichero en Internet: de texto y binario. Los archivos de texto utilizan caracteres ASCII y pueden ser visualizados y modificados en cualquier programa de cualquier sistema operativo que sea un editor de textos simple, como el Bloc de notas en Windows, Simpletext en Macintosh o Vi en Unix. En cambio, los archivos binarios contienen información más compleja que no puede ser leída por un programa editor de texto. Si abrimos un archivo binario en un editor de texto, lo que veremos son signos extraños que no se corresponden con el contenido real de ese archivo.

Archivos de texto plano

            .htm/.html: archivos escritos con Lenguaje de marcas de hipertexto (Hipertext Markup Language). Requiere un programa visualizador de páginas web para poder ser visto correctamente, pero puede ser modificado por un programa editor de texto.

            .txt: archivo de texto plano. Pueden ser vistos por todos los programas editores y procesadores de texto, e incluso con algunos otros, ya que se trata de uno de los formatos más universales.

           

Documentos con formato

            .doc: se trata de un documento de texto con formato que fue creado con un procesador de texto como Word. Sólo  puede ser visualizado correctamente con este programa o con otro que tenga una serie de filtros adecuados. Tipo de archivo: texto, pero como decimos, al tener formato no puede ser visualizado en cualquier editor de texto.

            .pdf: Portable Document Format. Archivo creado con Adobe Acrobat, un programa de Adobe Systems que permite que documentos formateados, incluyendo folletos u otra clase de impresos con contenido gráfico, puedan pasar de un sistema a otro sin cambiar la disposición de los elementos. Requiere el programa Adobe Acrobat Reader, que existe en versiones para Windows, Mac y Unix. Cualquier documento creado con Adobe Acrobat tendrá el mismo aspecto se abra en el sistema operativo que se abra. Formato binario

            .ps: archivo PostScript. Es un archivo ASCII, pero también con un formato especial que lo hace ilegible, excepto para impresoras PostScript. El lenguaje PostScript se desarrolló en los primitivos editores de texto para poder imprimir con el formato adecuado (tipo, tamaño, disposición, etc.). Estos archivos pueden ser visualizados, no obstante por algún programa visualizador en pantalla. De hecho, dentro de los sistemas Unix no es extraño encontrar documentos de información general en este formato.

            .wp/.wpd: archivo de texto con formato de WordPerfect. Al igual que el archivo .doc sólo puede ser visualizado con este programa o con otro que disponga de los filtros adecuados.

 

Archivos comprimidos y/o codificados

            Cuando hablamos de archivos comprimidos nos referimos al hecho de que a partir de un archivo concreto creado en un formato determinado, hemos creado otro archivo que contiene la misma información que el original, pero ocupando menos espacio de disco, y por lo tanto, permitiendo una transmisión más rápida a nuestros ordenadores. Para poder extraer la información original del archivo debemos disponer de un programa adecuado que devuelva a los archivos comprimidos su formato y su tamaño original. Existe también la posibilidad de crear archivos comprimidos autoextraíbles que aparentemente son programas ejecutables, pero que, en realidad sólo permiten la extracción del archivo original que está comprimido, sin necesidad de tener otros programas externos al propio archivo. Por otra parte, un archivo comprimido puede contener, a su vez, varios archivos independientes que han sido unidos para evitar una descarga incompleta, generalmente.

.arc: es un formato de compresión bastante antiguo y hoy en desuso. Formato binario.

            .arj: archivo comprimido en formato arj, usado, sobre todo en MS-DOS.

            .bin: archivo codificado binario para Macintosh. Es necesario un programa como Stuffit Expander.

            .exe: en general, un archivo terminado en exe es un ejecutable, es decir, un programa o aplicación con unas funciones determinadas, pero cuando nos referimos a un archivo exe dentro del apartado de los archivos comprimidos, estamos hablando de un archivo autoextraíble para MS-DOS o Windows. La única manera de saber si se trata de un ejecutable o de un fichero comprimido autoextraíble es abrirlo. Por supuesto, siempre que no contemos con otra información que nos indique de qué clase de fichero se trata. Formato Binario.

            .gz/.gzip: archivo comprimido mediante un programa que utiliza el algoritmo de compresión del GNU project (Proyecto para desarrollar software que no pertenezca a ninguna empresa determinada y con la posibilidad de que cada usuario modifique lo que desee del código fuente del programa). Se usa  sobre todo en plataformas Unix, Linux y también PC.

            .hqx: formato de codificación común para Macintosh. Se trata no tanto de un formato de compresión como de un formato que transforma un archivo binario en texto ASCII para poder ser transferido con seguridad por la red. Formato binario.

            .rar: formato de compresión que permite la subdivisión, a su vez, en varios paquetes de tamaño determinado de cualquier archivo. Se usa sobre todo en la red para que archivos que ocupan varios megas puedan ser transferidos por partes en sesiones diferentes. Plataforma PC. Formato binario.

            .sit: archivo Macintosh que ha sido comprimido con el programa Stuffit. Formato binario.

            .sea: archivo comprimido autoextraíble para Macintosh. Formato binario.

            .tar/.tar.gz/.tar.Z/.tgz: la terminación .tar por sí sola nos indica un archivo que no está comprimido, sino que está compuesto de varias partes que han sido unidas en un solo archivo. Por este motivo se suelen comprimir estos archivos además con gzip con lo que tenemos un archivo múltiple comprimido. Este tipo de compresión es usual en Unix y Linux.

            .uu: archivo uuencode, una de las formas de codificar archivos binarios en  texto para ser transferidos a través de la red. Antes era necesario disponer de un programa específico que descodificara la  cadena de texto para poder visualizar el archivo original, pero ahora es habitual que los propios programas clientes de correo electrónico o de news realicen la conversión automáticamente.

            .Z: archivo comprimido UNIX. Formato binario.

.zip: archivo comprimido para PC. Se utiliza WinZip para poder descomprimirlo.

            Los programas descompresores de archivos suelen manejar varios de los formatos anteriormente expuestos. Por ejemplo, WinZip en las plataformas Windows o Stuffit en Macintosh. Sin embargo hay formatos que no pueden abrirse con estos programas por lo que tendremos que acudir a un programa específico en esos casos.

 

Archivos de gráficos

            .gif: formato de archivo gráfico comprimido desarrollado por Compuserve para Internet. Por sus características es mejor para aquellos gráficos que estén compuestos de colores planos y trazados lineales. Es posible crear pequeñas animaciones en este formato. Formato binario.

            .jpg/.jpeg: formato de archivo gráfico comprimido desarrollado por la ISO (Organización Internacional de Estandarización) para imágenes fijas. Funciona muy bien con imágenes de colores complejos (fotografías). Formato binario.

            .tiff: formato de imagen de alta resolución y de gran tamaño. No suele usarse en Internet, pero es muy popular.

            Casi todos los formatos de archivo gráfico pueden ser visualizados en programas como Photoshop. También existen pequeñas aplicaciones para visualizar y modificar formatos concretos.

 

Archivos de sonido

            .au/.uLaw/.MuLaw: formato de sonido usado en Internet. Tipo binario.

            .aiff: formato de sonido típico de Macintosh, pero que también puede ser reproducido en PC. Binario.

            .mp3: formato de sonido comprimido, el más popular actualmente en la Red. Permite distribuir archivos de alta calidad de sonido con un tamaño muy reducido. Binario.

            .ra/.ram: formato de archivo Real Audio,. Creado por la empresa RealNetworks. Permite la transmisión de audio y video a través de Internet en tiempo real, si bien también pueden codificarse archivos en este sistema. Binario.

            .wav: formato de sonido nativo para Windows, si bien puede ser reproducido en otras plataformas como Macintosh. Binario.

 

Archivos de vídeo

            .avi: formato de vídeo nativo de Windows. Binario

            .mov/.movie: formato para películas Quicktime. Desarrollado en principio para plataformas Macintosh, se ha convertido en un estándar para la transmisión de películas en Internet para otras plataformas. Binario.

.mpg/.mpeg: formato estándar para películas también usado en Internet. Desarrollado, al igual que el jpeg por la ISO. Actualmente la norma mpeg acaba de desarrollar el mpeg4. Binario.

            .qt: otra extensión posible para las películas quicktime. Binario.

           

            Los tipos de archivo que hemos visto aquí no son todos los que existen. Cada programa crea su propia extensión para poder identificar los archivos creados, de manera que el sistema operativo sepa qué aplicación debe abrir al hacer doble clic sobre un documento o archivo.  Sin embargo hemos presentado aquellos tipos de archivo que, por su uso, son más comunes en Internet.

En general, cuando en Internet nos encontremos con un archivo sin extensión, supondremos que su formato es .txt, si bien esto no es una norma.

Si eliminamos la extensión de un archivo, este permanece intacto en el formato en que fue creado. Lo único que ocurre es que el sistema operativo no sabrá por sí mismo qué aplicación debe abrir para visualizar o modificar el archivo y tendremos que ser nosotros los que, desde la aplicación correspondiente abramos el documento. Esto nos ofrece una interesante manera de proteger nuestros documentos: si eliminamos la extensión de un archivo o le colocamos otra diferente de su formato original, quien desee abrir dicho documento se encontrará con que, si no sabe con qué programa se creó, no podra abrirlo.

 

Archivos binarios:

ARCHIVO DE ACCESO ALEATORIO

Los archivos de acceso aleatorio son más versátiles, permiten acceder a cualquier parte del fichero en cualquier momento, como si fueran arrays en memoria. Las operaciones de lectura y/o escritura pueden hacerse en cualquier punto del archivo.

 

En general se suelen establecer ciertas normas para la creación, aunque no todas son obligatorias:

 

Abrir el archivo en un modo que te permita leer y escribir. Esto no es imprescindible, es posible usar archivos de acceso aleatorio sólo de lectura o de escritura.

Abrirlo en modo binario, ya que algunos o todos los campos de la estructura pueden no ser caracteres.

Usar funciones como fread y fwrite, que permiten leer y escribir registros de longitud constante desde y hacia un fichero.

Usar la función fseek para situar el puntero de lectura/escritura en el lugar apropiado de tu archivo.

Por ejemplo, supongamos que nuestros registros tienen la siguiente estructura:

 

struct stRegistro {

   char Nombre[34];

   int dato;

   int matriz[23];

} reg;

Teniendo en cuenta que los registros empiezan a contarse desde el cero, para hacer una lectura del registro número 6 usaremos:

 

fseek(fichero, 5*sizeof(stRegistro), SEEK SET);

fread(&reg, sizeof(stRegistro), 1, fichero);

Análogamente, para hacer una operación de escritura, usaremos:

 

fseek(fichero, 5*sizeof(stRegistro), SEEK SET);

fwrite(&reg, sizeof(stRegistro), 1, fichero);

Muy importante: después de cada operación de lectura o escritura, el cursor del fichero se actualiza automáticamente a la siguiente posición, así que es buena idea hacer siempre un fseek antes de un fread o un fwrite.

 

En el caso de streams, la forma de trabajar es análoga:

 

fichero.seekg(5*sizeof(stRegistro), ios::beg);

fichero.read(&reg, sizeof(stRegistro));

Y para hacer una operación de escritura, usaremos:

 

fichero.seekp(5*sizeof(stRegistro), ios::beg);

fichero.write(&reg, sizeof(stRegistro));

Calcular la longitud de un fichero

Para calcular el tamaño de un fichero, ya sea en bytes o en registros se suele usar el siguiente procedimiento:

 

long nRegistros;

long nBytes;

fseek(fichero, 0, SEEK_END); // Colocar el cursor al final del fichero

nBytes = ftell(fichero); // Tamaño en bytes

nRegistros = ftell(fich)/sizeof(stRegistro); // Tamaño en registros

En el caso de streams:

 

long nRegistros;

long nBytes;

fichero.seekg(0, ios::end); // Colocar el cursor al final del fichero

nBytes = fichero.tellg(); // Tamaño en bytes

nRegistros = fichero.tellg()/sizeof(stRegistro); // Tamaño en registros

Borrar registros

Borrar registros puede ser complicado, ya que no hay ninguna función de librería estándar que lo haga.

 

Es su lugar se suele usar uno de estos dos métodos:

 

Marcar el registro como borrado o no válido, para ello hay que añadir un campo extra en la estructura del registro:

 

struct stRegistro {

   char Valido;  // Campo que indica si el registro es válido

   char Nombre[34];

   int dato;

   int matriz[23];

};

Si el campo Valido tiene un valor prefijado, por ejemplo 'S' o ' ', el registro es válido. Si tiene un valor prefijado, por ejemplo 'N' o '*', el registro será inválido o se considerará borrado.

 

De este modo, para borrar un registro sólo tienes que cambiar el valor de ese campo.

 

Pero hay que tener en cuenta que será el programa el encargado de tratar los registros del modo adecuado dependiendo del valor del campo Valido, el hecho de marcar un registro no lo borra físicamente.

 

Si se quiere elaborar más, se puede mantener un fichero auxiliar con la lista de los registros borrados. Esto tiene un doble propósito:

 

Que se pueda diseñar una función para sustituir a fseek() de modo que se tengan en cuenta los registros marcados.

Que al insertar nuevos registros, se puedan sobrescribir los anteriormente marcados como borrados, si existe alguno.

Hacer una copia del fichero en otro fichero, pero sin copiar el registro que se quiere borrar. Este sistema es más tedioso y lento, y requiere cerrar el fichero y borrarlo o renombrarlo, antes de poder usar de nuevo la versión con el registro eliminado.

Lo normal es hacer una combinación de ambos, durante la ejecución normal del programa se borran registros con el método de marcarlos, y cuando se cierra la aplicación, o se detecta que el porcentaje de registros borrados es alto o el usuario así lo decide, se "empaqueta" el fichero usando el segundo método.

 

 Ficheros indicados no ordenados: árboles binarios 

 

Para evitar tener que reconstruir el fichero de índices cada vez que se actualiza el archivo de datos existen varios métodos. Veremos ahora cómo implementar árboles binarios.

 

Para ello construiremos una estructura en árbol mediante una tabla almacenada en un archivo de disco.

 

 

La estructura para cada nodo del árbol es una extensión de la que usamos en el capítulo anterior, tan sólo añadiremos dos campos extra para apuntar a otros nodos:

 

struct stNodo {

   char telefono[10];

   long indice;

   long menor, mayor;

};

Crearemos el fichero de índices estructurados en árbol a partir del archivo de datos, asignando a cada registro el campo "telefono" y el número de registro correspondiente y añadiendo los enlaces a otros nodos. Veamos un ejemplo:

 

000: [Fulanito] [Pérez] [Sanchez] [12345678] [Mayor] [15] [Lisboa] [19540425] [S] [0]

001: [Fonforito] [Fernández] [López] [84565456] [Baja] [54] [Londres] [19750924] [C] [3]

002: [Tantolito] [Jiménez] [Fernández] [45684565] [Alta] [153] [Berlín] [19840628] [S] [0]

003: [Menganito] [Sanchez] [López] [23254532] [Diagonal] [145] [Barcelona] [19650505] [C] [1]

004: [Tulanito] [Sanz] [Sanchez] [54556544] [Pez] [18] [Dublín] [19750111] [S] [0]

Veremos cómo se actualiza el fichero de índices a medida que insertamos registros en el archivo de datos:

 

Paso uno:

 

[12345678][000][---][---]

Paso dos:

 

[12345678][000][---][001] <--

[84565456][001][---][---]

 

Paso tres:

 

[12345678][000][---][001]

[84565456][001][002][---] <--

[45684565][002][---][---]

 

Paso cuatro:

 

[12345678][000][---][001]

[84565456][001][002][---]

[45684565][002][003][---] <--

[23254532][003][---][---]

 

Paso cinco:

 

[12345678][000][---][001]

[84565456][001][002][---]

[45684565][002][003][004] <--

[23254532][003][---][---]

[54556544][004][---][---]

 

Como puede observarse, cada vez que se inserta un registro de datos, tan sólo hay que insertar un registro de índice y modificar otro.

 

Eliminar registros

 

Supongamos que queremos eliminar un registro de datos. En el archivo de datos simplemente lo marcamos como borrado. En teoría, mientras el registro no se elimine físicamente, no será necesario eliminar el registro de índice asociado. Simplemente estará apuntando a un registro marcado como borrado. Posteriormente, cuando purguemos el archivo de datos será necesario reconstruir el fichero de índices.

 

Duplicación de claves

 

No hay inconveniente en almacenar registros con claves duplicadas, tan sólo habrá que tener en cuenta que tendremos que almacenar un nodo para cada uno de ellos. Tomaremos un criterio para el árbol, la rama 'menor', y pasará a ser la rama 'menor o igual'.

Hosted by www.Geocities.ws

1