Proyecto Base de Datos
Emulación del nivel RAID2
#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string.h>
#include <fstream.h>
using namespace std;
int num_bytes;
int bytes_malos;
int error_disco1;
int error_disco2;
int error_disco3;
void fragmentar(string archorigen, string archdestino1 ,string archdestino2 ,string archdestino3 ,string archdestino4)
{
ifstream origen(archorigen.c_str(), ios::binary);
char linea[1];
if(origen.fail())
cerr << "Error al abrir el archivo "<<archorigen << endl;
else
{
ofstream destino1(archdestino1.c_str(), ios::binary|ios::trunc);
ofstream destino2(archdestino2.c_str(), ios::binary|ios::trunc);
ofstream destino3(archdestino3.c_str(), ios::binary|ios::trunc);
ofstream destino4(archdestino4.c_str(), ios::trunc);
if(destino1.fail())
cerr << "Error al crear el archivo destino1"<< endl;
else
{
while(!origen.eof()&&!origen.fail())
{
//escritura en primer disco
origen.read(linea, sizeof(linea));
if(origen.good())
{
cout<<"-";
destino4.put('-');
num_bytes++;
destino1.write(linea, sizeof(linea));
if(destino1.fail())
{
//cerr << "Error en el archivo destino1"<< endl;
cout<<"X";
destino4.put('x');
bytes_malos++;
error_disco1++;
}
}
else if(!origen.eof())
{
cerr << "Error en el archivo origen"<< endl;
}
//scritura en segundo disco
origen.read(linea, sizeof(linea));
if(origen.good())
{
cout<<"-";
destino4.put('-');
num_bytes++;
destino2.write(linea, sizeof(linea));
if(destino2.fail())
{
//cerr << "Error en el archivo destino1"<< endl;
cout<<"x";
destino4.put('x');
bytes_malos++;
error_disco2++;
}
}
else if(!origen.eof())
{
cerr << "Error en el archivo origen"<< endl;
}
//escritura en tercer disco
origen.read(linea, sizeof(linea));
if(origen.good())
{
cout<<"-";
destino4.put('-');
num_bytes++;
destino3.write(linea, sizeof(linea));
if(destino3.fail())
{
//cerr << "Error en el archivo destino1"<< endl;
cout<<"x";
destino4.put('x');
bytes_malos++;
error_disco3++;
}
}
else if(!origen.eof())
{
cerr << "Error en el archivo origen"
<< endl;
}
}
}
destino1.close();
destino2.close();
destino3.close();
destino4.close();
}
origen.close();
getch();
}
void desfragmentar(string archorigen1, string archorigen2 ,string archorigen3, string archorigen4, string archdestino)
{
ifstream origen1(archorigen1.c_str(), ios::binary);
ifstream origen2(archorigen2.c_str(), ios::binary);
ifstream origen3(archorigen3.c_str(), ios::binary);
ifstream origen4(archorigen4.c_str(), ios::binary);
char linea[1];
if(origen1.fail())
//cerr << "Error al abrir el archivo "<<archorigen1 << endl;
cout<<"X";
else
{
ofstream destino(archdestino.c_str(), ios::binary|ios::trunc);
if(destino.fail())
cerr << "Error al crear el archivo destino1"<< endl;
else
{
while(!origen1.eof()&&!origen2.eof()&&!origen3.eof())
{
//lectura del primer disco
origen1.read(linea, sizeof(linea));
cout<<"-";
if(origen1.good())
{
destino.write(linea, sizeof(linea));
if(destino.fail())
{
//cerr << "Error en el archivo destino1"<< endl;
cout<<"X";
}
}
else if(!origen1.eof())
{
cerr << "Error en el archivo origen"<< endl;
}
//lectura del segundo disco
origen2.read(linea, sizeof(linea));
cout<<"-";
if(origen2.good())
{
destino.write(linea, sizeof(linea));
if(destino.fail())
{
cerr << "Error en el archivo destino"<< endl;
cout<<"X";
}
}
else if(!origen2.eof())
{
cerr << "Error en el archivo origen 2"<< endl;
}
//escritura en tercer disco
origen3.read(linea, sizeof(linea));
cout<<"-";
if(origen3.good())
{
destino.write(linea, sizeof(linea));
if(destino.fail())
{
//cerr << "Error en el archivo destino"<< endl;
cout<<"X";
}
}
else if(!origen3.eof())
{
cerr << "Error en el archivo origen" << endl;
}
}
}
destino.close();
}
origen1.close();
origen2.close();
origen3.close();
origen4.close();
getch();
}
int main()
{
string archivo;
cout<<"introduzca nombre de un archivo con su extension"<<endl;
cin>>archivo;
string disco1="disco1.txt";
string disco2="disco2.txt";
string disco3="disco3.txt";
string disco4="control.txt";
string recuperado="recuperado.txt";
num_bytes=0;
cout<<"presione una tecla para desfragmentar"<<endl;
getch();
fragmentar(archivo,disco1,disco2,disco3,disco4);
cout<<endl<<"Se fragmento el archivo con los siguientes resultados:"<<endl;
cout<<"numero de bytes copiados: "<<num_bytes<<endl;
cout<<"numero de bytes malos: "<<bytes_malos<<endl;
cout<<"numero errores en disco1 : "<<error_disco1<<endl;
cout<<"numero errores en disco2 : "<<error_disco2<<endl;
cout<<"numero errores en disco3 : "<<error_disco3<<endl;
cout<<"se crearon las copias de seguridad"<<endl<<endl;
cout<<"presione una tecla para recuperar la informacion"<<endl;
getch();
cout<<"desfragmentando"<<endl;
desfragmentar(disco1,disco2,disco3,disco4,recuperado);
cout<<endl<<"desfragmentando terminado"<<endl;
getch();
return 0;
}