Ficheros cyc++

11
Elementos de Programación Ficheros Elementos 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. Ejemplos Elementos de Programaci ón. Ficheros. Curso 2002/2003 2

Transcript of Ficheros cyc++

Page 1: Ficheros cyc++

1

Elementos de Programación

Ficheros

Elementos de Programación. Ficheros. Curso 2002/2003 1

Índice1. Introducción. Concepto de fichero2. Generalidades sobre ficheros3. Ficheros en C++4. Librerías de manejo de ficheros en C++5. Ficheros en C6. Librerías de manejo de ficheros en C7. Ejemplos

Elementos de Programación. Ficheros. Curso 2002/2003 2

Page 2: Ficheros cyc++

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 ficherosFModo 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.

FTipos 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

Page 3: Ficheros cyc++

3

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.

Otras consideraciones sobre ficheros

Elementos de Programación. Ficheros. Curso 2002/2003 5

FC++ proporciona tres clases: fstream, ifstream y ofstream.

FNombres internos de los ficheros (streams) à objetos de las clases anteriores.

FDeclaració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.

Ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 6

ios

istream

ifstream

ofstream

iostream

ostream fstream

Page 4: Ficheros cyc++

4

Operaciones con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 7

FApertura 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.

Abre un fichero en modo binarioios::binary

Si el fichero existe, la operación de apertura fallaios::noreplace

Si el fichero no existe, la operación de apertura fallaios::nocreate

Descarta el contenido del fichero (si existe)ios::trunc

Crea fichero para salida ios::out

Abre fichero para entradaios::in

Abre fichero (si no existe lo crea), para escribir en cualquier lugarios::ate

Abre fichero (si no existe lo crea), para escribir al final de élios::app

Operaciones con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 8

FLectura secuencial con formatofstream & 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.

FEscritura secuencial con formatofstream & operator << (fstream &stream, tipo &var)ü Modifica el fichero stream escribiendo en él el contenido de var.ü Retorna una referencia a stream.

#include <fstream.h>… …ofstream f2; ifstream f3;… …f2.open(“datos2.dat ”);f3.open(“datos3.dat ”);

int x = 10, y;

f2 << “Escribo al fichero datos2.dat: “ << x << endl;f3 >> y; // lectura del fichero “datos3.dat ” un entero

Page 5: Ficheros cyc++

5

Operaciones con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 9

FLectura secuencial sin formato (binaria)istream & fstream::read (char * ptr, int size)ü Lee size bytes del fichero streamy los almacena en la dirección

indicada por prt.ü Retorna una referencia a stream.

FEscritura 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>… …ofstream f2; ifstream f3;… …f2.open(“datos2.dat ”, ios::binary);f3.open(“datos3.dat ”, ios::binary);

int x = 10, y;

f2.write((const char*) &x, sizeof(int));f3.read((char *) & y, sizeof(int);

Operaciones con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 10

FCierre de ficherosfstream::close ()ü Cierra el fichero y vacía todos los buffers asociados.ü No retorna ningún valor.

FDetectar el fin de ficheroint 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.

FBytes 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.

Page 6: Ficheros cyc++

6

Ficheros especiales en C++

Elementos de Programación. Ficheros. Curso 2002/2003 11

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.

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

Page 7: Ficheros cyc++

7

Acceso aleatorio con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 13

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.

Acceso aleatorio con ficheros en C++

Elementos de Programación. Ficheros. Curso 2002/2003 14

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).

Page 8: Ficheros cyc++

8

FC proporciona el tipo FILE.FLos nombres internos de los ficheros (streams) son

punteros al tipo.

Ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 15

#include <stdio.h> // incluye el tipo y las operaciones con ficheros

FILE *f; // declaración

Operaciones con ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 16

FApertura 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.

Abre fichero para lectura al principio (entrada)r

Abre fichero para escritura al principio (salida)w

Abre fichero en modo binariob

Abre fichero en modo textot

Abre fichero (si no existe lo crea), para actualización (lectura o escritura)a+

Abre fichero, si existe lo sobreescribe, para actualización (lectura o escritura)w+

Abre fichero existente para actualización (lectura o escritura)r+

Abre fichero (si no existe lo crea), para escribir al final de éla

Page 9: Ficheros cyc++

9

Operaciones con ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 17

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 Formatod entero (int)ld entero largo (long)f real (float )lf real largo (double)s string (char *, char[ ])c carácter (char)

Operaciones con ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 18

FLectura 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 streamsobre la dirección de memoria prt.

ü Retorna el número de bloques leídos. Si hay error, retorna un número menor que n.

FEscritura 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 streamdesde la dirección indicada por ptr.

ü Retorna el número de bloques leídos. Si hay error, retorna un número menor que n.

Page 10: Ficheros cyc++

10

Operaciones con ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 19

FCierre de ficherosint 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.

FDetectar el fin de ficheroint 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.

FBorrado de ficherosint 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.

Ficheros especiales en C

Elementos de Programación. Ficheros. Curso 2002/2003 20

FDefinidos 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.

Page 11: Ficheros cyc++

11

Acceso aleatorio con ficheros en C

Elementos de Programación. Ficheros. Curso 2002/2003 21

ü 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 streamcontando desde el principio del fichero. En caso de error retorna.