Ficheros en C y C++ Con Clase

download Ficheros en C y C++ Con Clase

of 46

  • date post

    13-Aug-2015
  • Category

    Documents

  • view

    22
  • download

    0

Embed Size (px)

Transcript of Ficheros en C y C++ Con Clase

Manejo de archivos. Captulo ---

Salvador Pozo Coronado (C) 2004, C con Clase

http://localhost/conclase/c/ficheros/para-pdf/curso.php [19/01/2004 20:08:03]

Manejo de archivos. Captulo 001

1 Generalidades:Muy a menudo necesitamos almacenar cierta cantidad de datos de forma ms o menos permanente. La memoria del ordenador es volatil, y lo que es peor, escasa y cara. De modo que cuando tenemos que guardar nuestros datos durante cierto tiempo tenemos que recurrir a sistemas de almacenamiento ms econmicos, aunque sea a costa de que sean ms lentos. Durante la historia de los ordenadores se han usado varios mtodos distintos para el almacenamiento de datos. Al principio se recurri a cintas de papel perforadas, despus a tarjetas perforadas. A continuacin se pas al soporte magntico, empezando por grandes rollos de cintas magnticas abiertas. Hasta aqu, todos los sistemas de almacenamiento externo eran secuenciales, es decir, no permitan acceder al punto exacto donde se guardaba la informacin sin antes haber partido desde el principio y sin haber ledo toda la informacin, hasta el punto donde se encontraba la que estabamos buscando. Con las cintas magnticas empez lo que con el tiempo sera el acceso aleatorio a los datos. Se poda reservar parte de la cinta para guardar cierta informacin sobre la situacin de los datos, y aadir ciertas marcas que hicieran ms sencillo localizarla. Pero no fu hasta la aparicin de los discos magnticos cuando sta tcnica lleg a su sentido ms amplio. En los discos es ms sencillo acceder a cualquier punto de la superficie en poco tiempo, ya que se accede al punto de lectura y escritura usando dos coordenadas fsicas. Por una parte la cabeza de lectura/escritura se puede mover en el sentido del radio del disco, y por otra el disco gira permanentemente, con lo que cualquier punto del disco pasa por la cabeza en un tiempo relativamente corto. Esto no pasa con las cintas, donde slo hay una coordenada fsica. Con la invencin y proliferacin de los discos se desarrollaron los ficheros de acceso aleatorio, que permiten acceder a cualquier dato almacenado en un fichero en relativamente poco tiempo. Actualmente, los discos duros tienen una enorme capacidad y son muy rpidos, aunque an siguen siendo lentos, en comparacin con las memorias RAM. El caso de los CD es algo intermedio. En realidad son secuenciales en cuanto al modo de guardar los datos, cada disco slo tiene una pista de datos grabada en espiral. Sin embargo, este sistema, combinado con algo de memoria RAM, proporciona un acceso muy prximo al de los discos duros. En cuanto al tipo de acceso, en C y C++ podemos clasificar los archivos segn varias categoras:

http://localhost/conclase/c/ficheros/para-pdf/curso.php?cap=001 (1 de 3) [19/01/2004 20:08:06]

Manejo de archivos. Captulo 001

1. Dependiendo de la direccin del flujo de datos: r De entrada: los datos se leen por el programa desde el archivo. r De salida: los datos se escriben por el programa hacia el archivo. r De entrada/salida: los datos pueden se escritos o ledos. 2. Dependiendo del tipo de valores permitidos a cada byte: r De texto: slo estn permitidos ciertos rangos de valores para cada byte. Algunos bytes tienen un significado especial, por ejemplo, el valor hexadecimal 0x1A marca el fin de fichero. Si abrimos un archivo en modo texto, no ser posible leer ms all de un byte con ese valor, aunque el fichero sea ms largo. r Binarios: estn permitidos todos lo valores para cada byte. En estos archivos el final del fichero se detecta de otro modo, dependiendo del soporte y del sistema operativo. La mayora de las veces se hace guardando la longitud del fichero. Cuando queramos almacenar valores enteros, o en coma flotante, o imgenes, etc, deberemos usar este tipo de archivos. 3. Segn el tipo de acceso: r Archivos secuenciales: imitan el modo de acceso de los antiguos ficheros secuenciales almacenados en cintas magnticas y r Archivos de acceso aleatorio: permiten acceder a cualquier punto de ellos para realizar lecturas y/o escrituras. 4. Segn la longitud de registro: r Longitud variable: en realidad, en este tipo de archivos no tiene sentido hablar de longitud de registro, podemos considerar cada byte como un registro. Tambin puede suceder que nuestra aplicacin conozca el tipo y longitud de cada dato almacenado en el archivo, y lea o escriba los bytes necesarios en cada ocasin. Otro caso es cuando se usa una marca para el final de registro, por ejemplo, en ficheros de texto se usa el carcter de retorno de lnea para eso. En estos casos cada registro es de longitud diferente. r Longitud constante: en estos archivos los datos se almacenan en forma de registro de tamao contante. En C usaremos estructuras para definir los registros. C dispone de funciones de librera adecuadas para manejar este tipo de ficheros. r Mixtos: en ocasiones pueden crearse archivos que combinen los dos tipos de registros, por ejemplo, dBASE usa registros de longitud constante, pero aade un registro especial de cabecera al principio para definir, entre otras cosas, el tamao y el tipo de los registros. Es posible crear archivos combinando cada una de estas categoras, por ejemplo: archivos secuenciales de texto de longitud de registro variable, que son los tpicos archivos de texto. Archivos de acceso aleatorio binarios de longitud de registro constante, normalmente usados en bases de datos. Y tambin cualquier combinacin menos corriente, como archivos secuenciales binarios de longitud de registro constante, etc.

http://localhost/conclase/c/ficheros/para-pdf/curso.php?cap=001 (2 de 3) [19/01/2004 20:08:06]

Manejo de archivos. Captulo 001

En cuanto a cmo se definen estas propiedades, hay dos casos. Si son binarios o de texto o de entrada, salida o entrada/salida, se define al abrir el fichero, mediante la funcin fopen en C o mediante el mtodo open de fstream en C++. La funcin open usa dos parmetros. El primero es el nombre del fichero que contiene el archivo. El segundo es em modo que es una cadena que indica el modo en que se abrir el archivo: lectura o escritura, y el tipo de datos que contiene: de texto o binarios. En C, los ficheros admiten seis modos en cuanto a la direccin del flujo de datos:q q q

q q q

r: slo lectura. El fichero debe existir. w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya existe. a: aadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea. r+: lectura y escritura. El fichero debe existir. w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya existe. a+: aadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.

En cuanto a los valores permitidos para los bytes, se puede aadir otro carcter a la cadena de modo:q q

t: modo texto. Normalmente es el modo por defecto. Se suele omitir. b: modo binario.

En ciertos sistemas operativos no existe esta distincin, y todos los ficheros son binarios. En C++ es algo diferente, el constructor de las clases ifstream, ofstream y fstream admite los parmetros para abrir el fichero directamente, y tambin disponemos del mtodo open, para poder crear el stream sin asociarlo con un fichero concreto y hacer esa asociacin ms tarde.

http://localhost/conclase/c/ficheros/para-pdf/curso.php?cap=001 (3 de 3) [19/01/2004 20:08:06]

Manejo de archivos. Captulo 002

2 Tipos, funciones y clases usados frecuentemente con ficherosFunciones y tipos C estndar: Tipo FILE:C define la estructura de datos FILE en el fichero de cabecesa "stdio.h" para el manejo de ficheros. Nosotros siempre usaremos punteros a estas estructuras. La definicin de sta estructura depende del compilador, pero en general mantienen un campo con la posicin actual de lectura/escritura, un buffer para mejorar las prestaciones de acceso al fichero y algunos campos para uso interno.

Funcin fopen:Sintaxis: FILE *fopen(char *nombre, char *modo);

sta funcin sirve para abrir y crear ficheros en disco. El valor de retorno es un puntero a una estructura FILE. Los parmetros de entrada son: 1. nombre: una cadena que contiene un nombre de fichero vlido, esto depende del sistema operativo que estemos usando. El nombre puede incluir el camino completo. 2. modo: especifica en tipo de fichero que se abrir o se crear y el tipo de datos que puede contener, de texto o binarios: r r: slo lectura. El fichero debe existir. r w: se abre para escritura, se crea un fichero nuevo o se sobreescribe si ya existe. r a: aadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea. r r+: lectura y escritura. El fichero debe existir. r w+: lectura y escritura, se crea un fichero nuevo o se sobreescribe si ya existe. r a+: aadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea. r t: tipo texto, si no se especifica "t" ni "b", se asume por defecto que es "t" r b: tipo binario.

Funcin fclose:Sintaxis: int fclose(FILE *fichero);

Es importante cerrar los ficheros abiertos antes de abandonar la aplicacin. Esta funcin sirve para eso. Cerrar un fichero almacena los datos que an estn en el buffer de memoria, y actualiza algunos datos de la cabecera del fichero que mantiene el sistema operativo. Adems permite que otros programas puedan abrir el fichero para su uso. Muy a menudo, los ficheros no pueden ser compartidos por varios programas. Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha habido algn error, el valor de retorno es la constante EOF. El parmetro es un puntero a la estructura FILE del fichero que queremos cerrar.

http://localhost/conclase/c/ficheros/para-pdf/curso.php?cap=002 (1 de 12) [19/01/2004 20:08:11]

Manejo de archivos. Captulo 002

Funcin fgetc:Sintaxis: int fgetc(FILE *fichero);

Esta funcin l