Archivos Binarios c++

April 2, 2018 | Author: Victorino Estevezin | Category: C++, Computer File, Computer Programming, Computer Architecture, Computer Engineering


Comments



Description

ARCHIVOS BINARIOS en C++ Los archivos binarios almacenan la información “byte a byte” en lugar de carácter por carácter, esto es muy útil cuando se necesita almacenar o recuperar información que no es un texto, por ejemplo: una imagen, un archivo ejecutable, un objeto, o datos numéricos de punto flotante. Estos archivos no se pueden leer con cualquier editor de texto, como el block de notas, hará falta otro programa, que podría ser desarrollado por nosotros para poder leerlo. Como ejemplo, realizaremos una copia de un archivo que contiene una imagen a otro archivo. Note que en este caso el programa ejecuta operaciones en archivos utilizando el modo binario (ios::binary), además es necesario aclarar el modo de apertura o escritura (ios::in) o (ios::out) Programa para copiar una foto a otro archivo #include <fstream> #include <iostream> using namespace std; int main() { ifstream origen("foto.jpg", ios::binary); ofstream destino("CopiaFoto.jpg", ios::binary); // QUITE ios::binary y vea el resultado char byte; while( !origen.eof() && !origen.fail() ) { origen.read((char *) & byte, sizeof(char)); if(origen.good()) { destino.write((char *) & byte, sizeof(char)); } } destino.close(); origen.close(); return 0; } Observará que se utiliza la función miembro origen.read ( ) para leer un byte del archivo especificado por el objeto origen. En forma similar, se utiliza la función miembro destino.write ( ) para escribir un byte en el archivo especificado por el objeto destino, que crea el archivo llamado CopiaFoto. Un byte no es más que 8 bits y se lo puede guardar en una variable de tipo char. y num es un entero que indica un número de bytes que se leerán o que se escribirán en el archivo. sizeof(int)). float f=12. archi. sizeof(int)). sizeof(float)). archivo. float y. ios::binary|ios::out|ios::app). archivo. debe escribir un programa para poder leer los datos como se muestra a continuación: int x.write((char *)&f. archi. num).bin". para agregar en un archivo binario dos variables de punto flotante al final del archivo se tiene: int e=10. cout<< "Se leyeron x= "<<x<< " . Por ejemplo. para expresar el tamaño o número de bytes a leer o escribir se usa la función sizeof que nos retorna el número de bytes que ocupa una variable o tipo. archi. Normalmente.read ((char *) &c. sizeof(float)). fstream archi2("prueba.close(). archi2. archi2.5235. y= "<<y.Leer y escribir en un archivo binario Para leer y escribir a partir de la posición actual del cursor en el archivo binario. fstream archi("prueba. Pero para poder leer los datos no basta con abrir el archivo.write ((char *) &c.close(). . archi2. read ((char *)&y. num).write((char *)&e. ios::binary|ios::in). se debe utilizar las funciones read () y write ().bin". Donde c es una variable o un objeto de cualquier tipo por referencia (&).read((char *)&x. mostrar(). // Guardamos en el archivo los dos gatos ofstream archivo("Datos. //Si es string se debe controlar el tamaño public: gato(void). sizeof(gato)). gato Tom (3.ios::binary).write((char *)&Garfield. archileer. archileer. archileer. sizeof(gato)). char c[20]). gato(int vid. por ejemplo. sizeof(gato)). } del archivo . si se tiene la clase gato siguiente: class gato { private: int vidas. (Ver el proyecto que la profesora proporcionó) Programa escribe y lee objetos en un archivo #include "gato. "Naranja"). // Leemos del archivo con el objeto gatin gato gatin.dat". gatin.. archivo. archivo. Set(). Get().read((char *) &gatin.close().close().. archivo. ifstream archileer("Datos.dat".ios::binary).seekg(sizeof(gato)*1). //Posicionar al inicio archileer. int main() { gato Garfield (13. char color[20]. //Posicionar en el segundo gato archileer. sizeof(gato)). }.read((char *) &gatin.seekg(0). gatin.write((char *)&Tom.h" #include <iostream> #include <fstream> using namespace std. "Plomo").Leer y escribir OBJETOS en un archivo binario Dependiendo del propósito del programa en ocasiones es necesario guardar un objeto completo dentro de un archivo.mostrar(). fstream archi2("Datos.bin".eof() ) { archi2. } archi2.mostrar(). // Guarda los datos usando app fstream archivo("Datos.ios::binary|ios::in).write((char *)&Garfield. sizeof(gato)).seekg(0).h" #include <iostream> #include <fstream> using namespace std.bin". archivo.Programa que escribe usando app y muestra TODO el archivo #include "gato. int main() { gato Garfield (7. // Lee los datos de todo el archivo en gatin gato gatin."Naranja"). archivo. sizeof(gato)).read((char *) &gatin.close().eof()) // Sin este if se muestra el ultimo 2 veces gatin. archi2.close(). if (!archi2. } Ejercicio: Mejorar el anterior programa y permitir: .ios::binary|ios::out|ios::app). while( !archi2. use seekp 6. Quitarles a todos los gatos de la lista una vida 9. A todos los gatos que tengan menos de 3 vidas sumarle una vida.ios::out y ios::in 5. Buscar gatos negros con 13 vidas y cambiarlos (en el archivo) por un gato blanco con 7 vidas. Cambiar el color a LILA del tercer gato introducido usar seekp . use seekp Usando una CLASE LISTA DE GATOS Si bien los archivos almacenan la información permanentemente. Mostrar todos los gatos rojos 2.1. Contar cuantos gatos tienen 7 vidas 3. Guardar la LISTA ordenada en un segundo archivo . puede ser buena idea usar una LISTA para descargar los datos del archivo y procesarlos en un tiempo más corto. Buscar todos los gatos que tienen entre 5 y 10 vidas y guardarlos en un segundo archivo 4. por ello dependiendo del problema. tienen la desventaja de que el tiempo de acceso a sus datos es más lento que el acceso a datos en la memoria principal. Ordenar ascendentemente los gatos de la LISTA por el número de vidas 10. Crear una clase lista de gatos y guardar en la LISTA a todos los gatos del archivo 8. 7.
Copyright © 2024 DOKUMEN.SITE Inc.