#include "Datos.h" #include "Registro.h" // Implementación de la clase Datos. void Datos::Guardar(Registro ®) { // Insertar al final: clear(); seekg(0, ios::end); write(reinterpret_cast (®), sizeof(Registro)); cout << reg.Nombre() << endl; } bool Datos::Recupera(long n, Registro ®) { clear(); seekg(n*sizeof(Registro), ios::beg); read(reinterpret_cast (®), sizeof(Registro)); return gcount() > 0; } // Marca el registro como borrado: void Datos::Borrar(long n) { char marca; clear(); marca = 'N'; seekg(n*sizeof(Registro), ios::beg); write(&marca, 1); } // Elimina los registros marcados como borrados void Datos::Empaquetar() { ofstream ftemp("alea.tmp", ios::out); Registro reg; clear(); seekg(0, ios::beg); do { read(reinterpret_cast (®), sizeof(Registro)); cout << reg.Nombre() << endl; if(gcount() > 0 && reg.Valido()) ftemp.write(reinterpret_cast (®), sizeof(Registro)); } while (gcount() > 0); ftemp.close(); close(); remove("alea.bak"); rename("alea.dat", "alea.bak"); rename("alea.tmp", "alea.dat"); open("alea.dat", ios::in | ios::out | ios::binary); }