Ficheros cyc++

432 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
432
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ficheros cyc++

  1. 1. Elementos de Programación FicherosElementos de Programaci ón. Ficheros. Curso 2002/2003 1 Índice 1. Introducción. Concepto de fichero 2. Generalidades sobre ficheros 3. Ficheros en C++ 4. Librerías de manejo de ficheros en C++ 5. Ficheros en C 6. Librerías de manejo de ficheros en C 7. EjemplosElementos de Programaci ón. Ficheros. Curso 2002/2003 2 1
  2. 2. Concepto de fichero FAlmacenamiento PERMANENTE de información que reside en la memoria secundaria (disco). Son independientes de los programas que los utilizan. FCaracterísticas: ü Residen en la memoria secundaria à Tamaño no limitado por la memoria. ü Utilizados por programas distintos. ü Identificados por un nombre externo, dependiente del sistema operativo, y un nombre interno, dependiente del lenguaje de programación. ü Contienen secuencias de bytes.Elementos de Programaci ón. Ficheros. Curso 2002/2003 3 Generalidades sobre ficheros F Modo de acceso: ü Secuencial. Para acceder a un objeto se debe acceder a los objetos almacenados previamente en el fichero. ü Directo o Aleatorio. Se accede directamente al objeto, sin recorrer los anteriores . F Tipos de operación: ü Lectura o Entrada. ü Escritura o Salida. F Formato de las operaciones: ü E/S sin formato. Representación binaria de la información es igual en memoria y en disco. ü E/S con formato. Cambio en la representación a formatos legibles humanamente.Elementos de Programaci ón. Ficheros. Curso 2002/2003 4 2
  3. 3. Otras consideraciones sobre ficheros FPunteros de los ficheros ü Los ficheros tienen asociados un puntero de lectura y otro de escritura que indican la posición donde se realizará la siguiente operación de E/S. ü En C los dos punteros son el mismo; en C++ hay uno para cada operación. FMarca de Fin de Fichero ü No existe una marca almacenada en el fichero que indique su fin. ü Para su detección hay que usar las funciones feof() o eof(). ü Para que las funciones anteriores detecten el final de fichero, debe leerse más allá del final de fichero.Elementos de Programaci ón. Ficheros. Curso 2002/2003 5 Ficheros en C++ F C++ proporciona tres clases: fstream, ifstream y ofstream. F Nombres internos de los ficheros (streams) à objetos de las clases anteriores. F Declaración de un objeto de uno de los tipos anteriores à establece un canal de comunicación entre un programa y un archivo almacenado en la memoria secundaria. ios istream ifstream iostream ostream fstream ofstreamElementos de Programaci ón. Ficheros. Curso 2002/2003 6 3
  4. 4. Operaciones con ficheros en C++ F Apertura y creación de ficheros void fstream::open(const char *name, int modo) ü Abre el fichero “name” en el modo indicado. No retorna ningún valor. ios::app Abre fichero (si no existe lo crea), para escribir al final de él ios::ate Abre fichero (si no existe lo crea), para escribir en cualquier lugar ios::in Abre fichero para entrada ios::out Crea fichero para salida ios::trunc Descarta el contenido del fichero (si existe) ios::nocreate Si el fichero no existe, la operación de apertura falla ios::noreplace Si el fichero existe, la operación de apertura falla ios::binary Abre un fichero en modo binarioElementos de Programaci ón. Ficheros. Curso 2002/2003 7 Operaciones con ficheros en C++ F Lectura secuencial con formato fstream & operator >> (fstream &stream, tipo &var) ü Modifica var con el contenido leido de stream. La lectura termina al encontrar blanco, tabulador o salto de línea. ü Retorna una referencia a stream. F Escritura secuencial con formato fstream & operator << (fstream &stream, tipo &var) ü Modifica el fichero stream escribiendo en él el contenido de var. ü Retorna una referencia a stream. #include <fstream.h> …… int x = 10, y; ofstream f2; ifstream f3; …… f2 << “ Escribo al fichero datos2.dat: “ << x << endl; f2.open(“ datos2.dat ”); f3 >> y; // lectura del fichero “ datos3.dat ” un entero f3.open(“ datos3.dat ”);Elementos de Programaci ón. Ficheros. Curso 2002/2003 8 4
  5. 5. Operaciones con ficheros en C++ F Lectura secuencial sin formato (binaria) istream & fstream::read (char * ptr, int size) ü Lee size bytes del fichero stream y los almacena en la dirección indicada por prt. ü Retorna una referencia a stream. F Escritura secuencial sin formato (binaria) ostream & fstream::write (const char * ptr, int size) ü Escribe size bytes al fichero stream desde la dirección indicada por ptr. ü Retorna una referencia a stream. #include <fstream.h> …… int x = 10, y; ofstream f2; ifstream f3; …… f2.write((const char*) &x, sizeof(int)); f2.open(“ datos2.dat ”, ios::binary); f3.read ((char *) & y, sizeof(int); f3.open(“ datos3.dat ”, ios::binary);Elementos de Programaci ón. Ficheros. Curso 2002/2003 9 Operaciones con ficheros en C++ F Cierre de ficheros fstream::close () ü Cierra el fichero y vacía todos los buffers asociados. ü No retorna ningún valor. F Detectar el fin de fichero int ios::eof () ü Indica si se han leído todos los datos del fichero. ü Retorna 0 si no llegó al final, distinto de 0 en caso contrario. F Bytes leidos con read() (lectura sin formato) int istream::gcount () ü Después de una operación de lectura binaria, indica cuántos bytes se han leído del fichero. ü Retorna el nú mero de bytes leídos de un stream.Elementos de Programaci ón. Ficheros. Curso 2002/2003 10 5
  6. 6. Ficheros especiales en C++ FDefinidos en iostream.h Fcin: Objeto de la clase istream conectado a la entrada estándar (teclado). Fcout: Objeto de la clase ostream conectado a la salida estándar (pantalla). Fcerr: Objeto de la clase ostream conectado a la salida estándar de error (pantalla). Sin buffer. Fclog: Objeto de la clase ostream conectado a la salida estándar de error (pantalla). Con buffer.Elementos de Programaci ón. Ficheros. Curso 2002/2003 11 Acceso secuencial y aleatorio FLas operaciones de E/S provocan un desplazamiento de los punteros del fichero equivalente al número de bytes leídos/escritos El puntero queda apuntando al siguiente byte. FEn el acceso secuencial, los punteros no se desplazan si no es con operaciones de E/S. FEn el acceso aleatorio (o directo): ü Uso de los métodos seekg, seekp, tellg y tellp (fstream.h)Elementos de Programaci ón. Ficheros. Curso 2002/2003 12 6
  7. 7. Acceso aleatorio con ficheros en C++ istream& flectura.seekg(streamoff offset, seek_dir dir); ü Desplaza el puntero de lectura del fichero flectura offset bytes desde la ubicación indicada por dir. Valores de dir apropiados son: – ios::beg desde el inicio de fichero. – ios::cur desde la posición actual del fichero. – ios::end desde el final de fichero. ü Retorna una referencia al fichero flectura. ostream& fescritura.seekp(streamoff offset, seek_dir dir); ü Igual que seekg, pero para el puntero de escritura. long flectura.tellg(); ü Retorna la posición actual (en bytes) del puntero de lectura del fichero flectura, contando desde el principio de fichero. long fescritura.tellp(); ü Igual que tellg, pero para el puntero de escritura.Elementos de Programaci ón. Ficheros. Curso 2002/2003 13 Acceso aleatorio con ficheros en C++ FFicheros de entrada: istream ü Definidos los métodos: tellg y seekg. FFicheros de salida: ostream ü Definidos los métodos: tellp y seekp. FFicheros de entrada/salida: fstream ü Presentan puntero de lectura y escritura à tienen definidos los cuatro métodos. ü Punteros de lectura y escritura se modifican simultáneamente al llamar a los dos métodos (seekg y seekp).Elementos de Programaci ón. Ficheros. Curso 2002/2003 14 7
  8. 8. Ficheros en C FC proporciona el tipo FILE. FLos nombres internos de los ficheros (streams) son punteros al tipo. #include <stdio.h> // incluye el tipo y las operaciones con ficheros FILE *f; // declaraciónElementos de Programaci ón. Ficheros. Curso 2002/2003 15 Operaciones con ficheros en C F Apertura y creación de ficheros FILE *fopen(const char *name, const char * modo) ü Abre el fichero “name” en el modo indicado. No retorna ningún valor. r Abre fichero para lectura al principio (entrada) w Abre fichero para escritura al principio (salida) a Abre fichero (si no existe lo crea), para escribir al final de él r+ Abre fichero existente para actualización (lectura o escritura) w+ Abre fichero, si existe lo sobreescribe, para actualización (lectura o escritura) a+ Abre fichero (si no existe lo crea), para actualización (lectura o escritura) t Abre fichero en modo texto b Abre fichero en modo binarioElementos de Programaci ón. Ficheros. Curso 2002/2003 16 8
  9. 9. Operaciones con ficheros en C F Lectura secuencial con formato int fscanf(FILE * stream, const char *formato [, ptr,...]) ü Modifica el contenido de las direcciones de las variables ptr con los valores leídos de stream. ü Retorna el número de campos de entrada escaneados y almacenados en las variables respectivas. Si se lee más allá del final de fichero retorna EOF. F Escritura secuencial con formato int fprintf(FILE * stream, const char *formato [, arg,...]) ü Escribe en stream la información de arg en el formato indicado. ü Retorna el número de bytes escritos. En caso de error retorna EOF. F Formato d entero (int) ld entero largo (long) f real (float ) lf real largo (double) s string (char *, char[ ]) c carácter (char)Elementos de Programaci ón. Ficheros. Curso 2002/2003 17 Operaciones con ficheros en C F Lectura secuencial sin formato (binaria) size_t fread(void *ptr, size_t size , size_t n, FILE *stream) ü Lee n bloques de tamaño size del fichero stream sobre la dirección de memoria prt. ü Retorna el nú mero de bloques leídos. Si hay error, retorna un número menor que n. F Escritura secuencial sin formato (binaria) size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream) ü Escribe n bloques de tamaño size al fichero stream desde la dirección indicada por ptr. ü Retorna el nú mero de bloques leídos. Si hay error, retorna un número menor que n.Elementos de Programaci ón. Ficheros. Curso 2002/2003 18 9
  10. 10. Operaciones con ficheros en C F Cierre de ficheros int fclose (FILE* stream) ü Cierra el fichero y vacía todos los buffers asociados. ü Retorna 0 en caso de éxito y EOF en caso de error. F Detectar el fin de fichero int feof (FILE *stream) ü Indica si se han leído todos los datos del fichero. ü Retorna 0 si no llegó al final, distinto de 0 en caso contrario. F Borrado de ficheros int remove (const char * name) ü Borra el fichero de nombre name del sistema de ficheros. ü Retorna 0 en caso de éxito y -1 en caso de error.Elementos de Programaci ón. Ficheros. Curso 2002/2003 19 Ficheros especiales en C F Definidos en stdio.h F stdin: Fichero conectado a la entrada estándar (teclado). F stdout: Fichero conectado a la salida estándar (pantalla). F stdcerr: Fichero conectado a la salida estándar de error (pantalla). Sin buffer. F Funciones de E/S asociadas a los ficheros especiales: – printf: igual que fprintf pero con stdout como parámetro por defecto para FILE *stream. – scanf: igual que fscanf pero con stdin como parámetro por defecto para FILE *stream.Elementos de Programaci ón. Ficheros. Curso 2002/2003 20 10
  11. 11. Acceso aleatorio con ficheros en C ü Uso de las funciones rewind, fseek, ftell (stdio.h). void rewind(FILE *stream); ü Posiciona el puntero del fichero stream al principio. ü Retorna nada. int fseek(FILE * stream, long offset, int whence); ü Posiciona el puntero del fichero stream en offset bytes desde donde indique whence. Valores de whence: – 0 desde el inicio de fichero. – 1 desde la posición actual del fichero. – 2 desde el final de fichero. ü Retorna 0 si la operación tuvo éxito y cualquier otro valor en caso de error. long int ftell(FILE * stream); ü Retorna la posición actual (en bytes) del puntero del fichero stream contando desde el principio del fichero. En caso de error retorna.Elementos de Programaci ón. Ficheros. Curso 2002/2003 21 11

×