PLE:Unidad7

=Entrada y Salida con ficheros= C++ nos proporciona un conjunto de clases que nos permiten la entrada y salida de datos desde y hacia ficheros. Concretamente disponemos de:


 * ofstream: Clase para la escritura de datos en ficheros
 * ifstream: Clase para la lectura de datos desde ficheros
 * fstream: Clase para la escritura/lectura de datos en ficheros.

=ofstream= Esta clase no proporciona un flujo de datos (stream) para escribir datos en un fichero Para crearnos un objeto de tipo stream basta declararlo como ofstream, tal como se muestra a continuación:

using namespace std;
 * 1) include
 * 2) include

void main {	ofstream fs; fs.open ("fichero.txt"); fs << "Escribiendo en un fichero mediante ofstream.\n"; fs.close; }

En este primer caso el stream no está conectado con un determinado fichero, por lo que deberemos conectarlo con posterioridad como veremos en la operación "open".

Por otro lado podemos declarar un stream de salida y conectarlo con un fichero determinada, tal como muestra el siguiente fragmento de código:

using namespace std;
 * 1) include
 * 2) include

void main {	ofstream fs; fs.open ("example.txt"); fs << "Escribiendo en un fichero mediante ofstream.\n"; fs.close; }

=Abriendo un fichero= La operación de apertura nos permite conectar un fichero determinado con un objeto "stream". Una vez llevada a cabo la operación de apertura, todoas las operaciones de entrada o salida se llevarán a cabo sobre el fichero al cual hemos conectado el stream.

open(nombreFichero, modeApertura);

Al llevar a cabo la llamada a la función miembro "open" debemos especificar el nombre del fichero y el modo de apertura a emplear. El modo de apertura es opcional y resulta la combinación de los valores mostrados en la siguiente tabla:

Los valores expuestos se pueden combinar mediante el operados OR "|".

ofstream fs; fs.open ("fichero.bin", ios::out | ios::app | ios::binary);

Abre el fichero en modo binario, para escritura y añadiendo escribiendo los datos al fical del mismo.

El modo de apertura por defecto va a depender del tipo de stream que estemos empleando. En el caso de un stream de salida (ofstrem) se asume el modo "ios::out".

Para comprobar que un stream asociado a un fichero se ha abierto correctamente podemos utilizar la función miembro "is_open" que nos devuelve un valor lógico que nos indica que la apertura se ha llevado a cabo correctamente.

using namespace std;
 * 1) include
 * 2) include

void main {	ofstream fs; fs.open ("example.txt"); if(fs.is_open) fs << "Escribiendo en un fichero mediante ofstream.\n"; else cout << "Error de apertura\n"; fs.close; }

=Cerrando ficheros= Una vez que hemos finalizado todas las operaciones de entrada o salida en fichero, este debe ser liberado mediante la operación "close".

fs.close;

Al llamar a esta función miembro, el objeto stream queda liberado y puede ser utilizado para acceder a otro fichero distinto. Además el fichero con el que estaba ligado el objeto stream puede ser abierto nuevamente por cualquier otro stream.

=ifstream= Esta clase no proporciona un flujo de datos (stream) para leer datos en un fichero Para crearnos un objeto de tipo stream basta declararlo como ifstream, tal como se muestra a continuación:

using namespace std;
 * 1) include
 * 2) include

void main {	ifstream fe; char cad[80]: fe.open ("fichero.txt"); // Leemos una linea desde el fichero de estrada fe >> cad; // Escribimos en pantalla cout << cad; fe.close; }

=Banderas de estado= Disponemos de una serie de funciones miembro que nos permiten testar el estado de un stream. Todoas estas funciones devuelven valores de tipo lógico.

using namespace std;
 * 1) include
 * 2) include

void main {	ifstream fe; char cad[80]: fe.open ("fichero.txt"); // Leemos una linea desde el fichero de estrada fe >> cad; while(|fe.eof) {		// Escribimos en pantalla cout << cad; // Leemos la siguiente linea fe >> cad; }	fe.close; }

=Ejercicios=
 * 1) Escribir varias lineas de texto en fichero de texto
 * 2) Leer un fichero de texto y mostrarlo en pantalla
 * 3) Contar la frecuencia de aparición de caracteres en un fichero de texto
 * 4) Contar la frecuencia de aparición de palabras en un fichero de texto
 * 5) Cifrar un fichero de texto mediante el método Cesar
 * 6) Descifrar un fichero de texto mediante el método Cesar
 * 7) Agregar a la agenda electrócia la opción de lectura y escritura en fichero
 * 8) Mini editor de texto.
 * 9) Editor hexadecimal
 * 10) Operaciones sobre ficheros "BMP"
 * 11) Editar etiquetas ID3
 * 12) Uso de una libreria de compresión de datos