/* Funcionar para ocultar (y demostración) el cursor en la pantalla */
show_hide_cursor ( 32, 0 );
gotoxy(15,18);cprintf("[ %d ] Files Recovered...",
num);
/* search for the data until the ending sector of the
disk */
while(loop<Sectors_in_HDD2)
{
/* Read one Sector (Sector No. = loop) */
readabsolutesectors ( 0x81, loop, 1, buffer );
gotoxy(19,16);cprintf("Scanning Sector Number = % ld",
loop);
if(kbhit())
{
show_hide_cursor ( 6, 7 ); /* Retrieve the
cursor before
Exit the program
*/
exit(0);
}
/* if specified header is found */
if((memcmp ( buffer, header,7))==0)
{
/* logic to provide the file name to automatically
create the files to save the recovered data */
strcpy(filename, path);
itoa(num,temp,10);
strcat(filename, temp);
strcat(filename,".DOC");
start_file=loop; /* starting sector of file */
gotoxy(5,19);cprintf("File Found..., Saving As %s",
filename);
num++;
////////////// File Close Conditions \\\\\\\\\\\\\\\\
file_size=0;
while( file_size<5000000)
{
loop++;
file_size+=512;
readabsolutesectors ( 0x81, loop, 1, buffer );
gotoxy(19,16);cprintf("Scanning Sector Number = % ld" ,
loop);
/* if file size reaches up to maximum size of 5MB */
if(file_size>=5000000)
{
end_file=loop; /* Ending Sector of File */
Recover_the_file();/* write the data to file */
break;
}
/* if footer of DOC file is found */
for(i=0;i<512;i++)
{
if( memcmp(buffer+i,DOC_footer,12)==0 )
{
end_file=loop; /* Ending Sector of File */
Recover_the_file();/* write the data to file */
break;
}
}
/* if another header is found */
if( memcmp(buffer,header,7)==0 )
{
loop=loop-1;
end_file=loop; /* Ending Sector of File */
Recover_the_file();/* write the data to file */
break;
}
if(kbhit())
{
show_hide_cursor ( 6, 7 );
exit(0);
}
}
}
loop++;
} ////////While Loop Ends Here
/* display message for completion of search and recovery */ if(loop>=Sectors_in_HDD2 )
{
gotoxy(17,23);cprintf("The Saving of files in the Disk is
Completed !!");
gotoxy(17,24);cprintf("Press Any Key to Exit...");
show_hide_cursor ( 6, 7 );
getch();
}
}
Comentarios sobre la codificación:
La geometría de la estructura es utilizada por la función getdrivegeometry usando 13H la extensión INTERNA, número 0x48 de la función para conseguir los varios parámetros del disco.
El diskaddrpacket de la estructura está para el formato del paquete de la dirección de disco, ser utilizado por los readabsolutesectors funciona.
La función getdrivegeometry (impulsión interna) es conseguir los parámetros de la impulsión del disco especificó la impulsión física del número de impulsión.
(char) peekb(0x0040, 0x0075) se utiliza encontrar el número de los discos duros conectados con la computadora, almacenada en la posición de memoria representada por el segmento 0040H: 0075H compensado. Si es total el número de los discos duros unidos es menos entonces mensaje y salida de error de dos exhibiciones.
Sectors_in_HDD2=getdrivegeometry (0x81); encuentra los varios parámetros del segundo disco duro físico (0x81) y de vueltas el número total de los sectores del disco.
La declaración si (acceso (trayectoria, 0)! = 0) comprueba la accesibilidad de la trayectoria dada por el usuario. ¡Si no existe el directorio de la destinación, la destinación se crea hasta un nivel y si la trayectoria dada comprobó por la condición si (mkdir (trayectoria)! se exhibe =0) es ilegal, mensaje de error.
Los nombres del archivo de los archivos automáticamente creados para ahorrar los datos recuperados se crean tales que los primeros tres caracteres de los archivos son dados el PTT por el strcat (trayectoria, “\ \ Ptt”); función. Se hace tan para evitar los nombres duplicados del archivo en el directorio de la destinación. Por lo tanto los nombres del archivo de archivos recuperados se dan en formato de “PTTxxxxx.DOC”
El show_hide_cursor de la función (32, 0); se utiliza ocultar el cursor de la pantalla donde el show_hide_cursor (6, 7); recupera el cursor de nuevo a la pantalla.
Los readabsolutesectors de la función (0x81, lazo, 1, almacenador intermediario); Lee un sector del segundo disco duro físico especificado por el lazo del número del sector.
Si el jefe del archivo se encuentra, start_file = lazo; fija el start_file a comenzar el número del sector del archivo que se recuperará. El programa sigue las tres condiciones dadas después, para encontrar el sector del conclusión del archivo:
- Si el tamaño del archivo alcanza hasta máximo clasificar de 5MB
- Si el pie del archivo del doc. se encuentra
- Si se encuentra otro jefe
El número entero largo end_file es fijado al número del sector del conclusión del archivo por el end_file=loop; si cualquier una condición fuera de tres está satisfecha. Ahora los datos de los sectores, a partir de el número del sector start_file al número del sector end_file se ahorran al archivo con la función Recover_the_file ().
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|