Archivos Binarios C++
Archivos Binarios C++
Archivos Binarios C++
Los archivos binarios almacenan la informacin byte a byte en lugar de carcter por carcter, esto es muy til cuando se necesita almacenar o recuperar informacin que no es un texto, por ejemplo: una imagen, un archivo ejecutable, un objeto, o datos numricos de punto flotante. Estos archivos no se pueden leer con cualquier editor de texto, como el block de notas, har falta otro programa, que podra 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), adems es necesario aclarar el modo de apertura o escritura (ios::in) o (ios::out)
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 funcin miembro origen.read ( ) para leer un byte del archivo especificado por el objeto origen. En forma similar, se utiliza la funcin 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 ms que 8 bits y se lo puede guardar en una variable de tipo char.
class gato { private: int vidas; char color[20]; //Si es string se debe controlar el tamao public: gato(void); gato(int vid, char c[20]); Get().. Set().. };
(Ver el proyecto que la profesora proporcion)
ifstream archileer("Datos.dat",ios::binary);
archileer.seekg(sizeof(gato)*1); //Posicionar en el segundo gato archileer.read((char *) &gatin, sizeof(gato)); gatin.mostrar(); archileer.seekg(0); //Posicionar al inicio archileer.read((char *) &gatin, sizeof(gato)); gatin.mostrar(); archileer.close(); }
del archivo
Garfield (7,"Naranja");
// Guarda los datos usando app fstream archivo("Datos.bin",ios::binary|ios::out|ios::app); archivo.write((char *)&Garfield, sizeof(gato)); archivo.close();
// Lee los datos de todo el archivo en gatin gato gatin; fstream archi2("Datos.bin",ios::binary|ios::in); archi2.seekg(0); while( !archi2.eof() ) { archi2.read((char *) &gatin, sizeof(gato)); if (!archi2.eof()) // Sin este if se muestra el ultimo 2 veces gatin.mostrar(); } archi2.close(); }
Ejercicio:
1. Mostrar todos los gatos rojos 2. Contar cuantos gatos tienen 7 vidas 3. Buscar todos los gatos que tienen entre 5 y 10 vidas y guardarlos en un segundo archivo
4. Cambiar el color a LILA del tercer gato introducido usar seekp ,ios::out y ios::in 5. A todos los gatos que tengan menos de 3 vidas sumarle una vida, use seekp 6. Buscar gatos negros con 13 vidas y cambiarlos (en el archivo) por un gato blanco
con 7 vidas, use seekp