1 Archivos
2 Archivos : OperacionesOperaciones para el manejo habitual de un fichero: 1.- Crearlo (sólo si no existía previamente) 2.- Abrirlo 3.- Operar sobre él (lectura/escritura,inserción, borrado, etc.) 4.- Cerrarlo
3 Archivos : ClasificacionClasificación de los ficheros según la organización de los registros en memoria: Organización Secuencial: Registros almacenados consecutivamente en memoria según el orden lógico en que se han ido insertando. Organización Directa o Aleatoria: El orden físico de almacenamiento en memoria puede no coincidir con el orden en que han sido insertados.
4 Archivos : ClasificaciónClasificación de los ficheros según el acceso a la información almacenada: Acceso secuencial: Para acceder a un registro es necesario pasar por todos los anteriores. Ej: Cinta de Casette. El tiempo de acceso depende de la posición del dato Acceso directo o aleatorio: Se puede acceder a un registro sin pasar por todos los anteriores. Ej: Disco Duro. El tiempo de acceso es constante (igual que en arrays) Clasificación de los ficheros según el tipo de la información almacenada: Ficheros Binarios: Almacenan secuencias de dígitos binarios (ej: ficheros que almacenan enteros, floats,…) Ficheros de Texto: Almacenan caracteres alfanuméricos en un formato estándar (ASCII, Unicode, UTF8, UTF16, etc.). Pueden ser leídos y/o modificados por aplicaciones denominadas editores de texto (Ej: Notepad, UltraEdit, Editplus, etc.).
5 Archivos C++ Streams En C++, los archivos se manejan con un tipo particular de stream. Un stream es una estructura de datos que se utiliza para manejar un “flujo de caracteres” y permitir poner o sacar de el tipos de datos est andar o clases definidas por el usuario. Por ejemplo, cout es un stream que nos permite escribir caracteres en la consola.
6 Archivos C++: Las clases que nos da C++ para el acceso a ficheros de texto son ifstream, ofstream y fstream ifstream, : leer del fichero ( i de input, f de file y stream). ofstream para escribir (o de output, f de file y stream). fstream. vale para las dos cosas, lectura y escritura.
7 Archivos C++:OperacionesAbrir los ficheros La apertura del fichero se puede hacer 1. pasando parámetros al declarar la variable de estos tipos, EJ : ifstream f ("fichero.txt", ifstream::in); 2.O bien declarando la variable sin parámetros y luego llamando al método open(). Variable Tipo Nombre Archivo
8 Archivos C++ : Operaciones#include
9 Archivos c++:OperacionesEl primer parámetro es el nombre del fichero. Path absoluto o relativo según nos interese. Absoluto :”c:\archivo.txt” Relativo : “archivo.txt” El segundo parámetros son unos flags para indicar cómo queremos abrir el fichero. Estos flags están en la clase ios_base::openmode y pueden ser los siguientes
10 Archivos c++:Operacionesapp (append) Para añadir al final del fichero. Todas las escrituras que hagamos se iran al final del fichero. Si nos movemos por el fichero a una posición concreta (con el método seekp()) y luego escribimos, también se escribirá al final del fichero, ignorando la posición actual en la que nos situemos con seekp(). ate (at end). Para añadir al final del fichero. Sin embargo, si nos movemos a otra posición del fichero (con seekp()) y escribimos, la escritura se hará en la posición en la que nos pongamos, y no al final como en el caso anterior. binary (binary) Se abre el fichero como fichero binario. Por defecto se abre como fichero de texto. in (input) El fichero se abre para lectura. out (output) El fichero se abre para escritura trunc (truncate) Si el fichero existe, se ignora su contenido y se empieza como si estuviera vacio. Posiblemente perdamos el contenido anterior si escribimos en él.
11 Archivos c++:OperacionesSi queremos abrir el fichero con varias de estas opciones, tenemos que componerlas con un OR (el caracter | ), f2.open("fichero2.txt", ofstream::out | ofstream::trunc);
12 Archivos C++: Metodos Hay varias formas de comprobar si ha habido o no un error en la apertura del fichero. La más cómoda es usar el operator ! que tienen definidas estas clases. Sería de esta manera if (!f) { cout << "fallo" << endl; return -1; } !f devuelve true si ha habido algún problema de apertura del fichero
13 Archivo c++: OperacionesLectura y escritura /* Declaramos un array con suficiente tamaño para leer las líneas */ char cadena[100]; /* Leemos */ f >> cadena; /* y escribimos */ f2 << cadena; Lee y guarda el valor en la variable cadena Nombre variable arch
14 Archivos c++ : Ejemplo Vamos a crear un fichero mediante un objeto de la clase ofstream, y posteriormente lo leeremos mediante un objeto de la clase ifstream #include
15 Archivo c++: Operaciones-entradaPara abrir un archivo para lectura, utilizamos un ifstream. Para eso, tenemos que definir una variable de ese tipo y vincularla a algún archivo. Para realizar esta vinculación, tenemos dos métodos: Dar el nombre del archivo al declarar la variable O utilizar el método open. Ambos producen el mismo resultado.
16 Archivo c++: Operaciones-entrada#include
17 Archivo c++: Operaciones -Salida#include
18 Archivo c++: Operaciones -SalidaPara manejar un archivo de salida, utilizamos un ofstream #include
19 Archivo c++: Operaciones -Bucles/* Hacemos una primera lectura */ f >> cadena; while (!f.eof()) { /* Escribimos el resultado */ f2 << cadena << endl; /* Leemos la siguiente línea */ f >> cadena; } Mientras no sea fin de archivo
20 BUCLES #include
21 ARCHIVO C++:OPERACIONES -ENTRADA#include
22 Operadores Operador >>Igual como se suele usar con el stream estandar cin, el operador de flujo de salida >> se puede usar con streams de entrada cuando trabajos con archivos Operador<< Lo mismo sucede con este operador, se puede usar con streams de salidas cuando trabajamos con archivos. La Funcion close(); Cierra el stream liberando asi los recursos asociados
23 Archivos : Declaración - AperturaDeclaración de Variables de tipo "Fichero": Apertura de Ficheros de Texto (supongamos TCadena nombre): ifstream descriptor; // Para ficheros de entrada ofstream descriptor; // Para ficheros de salida in.open(nombre); // Apertura para Lectura out.open(nombre); /* Apertura para Escritura. (borra el contenido si lo hubiera) */ out.open(nombre,ios::app); // Apertura para añadir datos al final
24 Archivos : Funciones Detección de fin de fichero y otras funciones.eof() devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso. REQUIERE LECTURA ADELANTADA: Para que la función eof() devuelva un valor de verdad. fail() devuelve true si existe un error en una operación de flujo asociada al fichero bad() devuelve true si el flujo está corrupto. good() que devuelve true si no existe un error en una operación de flujo y false en caso contrario.
25 Ejemplo Escritura #include
26 Ejemplo Lectura #include
27 Pido el nombre del archivoEjemplo Formato #include