Pues no existe ninguna API que permita recuperar los archivos "magicamente". Para poder recuperar un archivo "por codigo" necesitas tener un respetable conocimiento acerca de los sistemas de archivos; solo para dar un ejemplo hablemos del
FAT que es un sistema de archivos antiguo utilizado en la actualidad en las unidades "Flash" de unas decenas de Gb como máximo; Al borrar un archivo en una de estas unidades los pasos que el SO realiza son:
- "Encontrar" el archivo a ser eliminado (posicion física absoluta)
- De su estructura, obtener su Cluster "inicial" del archivo.
- Dependiendo de la informacion del Boot, se calcula la cantidad de copias de FAT existentes y la posicion absoluta de éstas.
- Se define como "vacío" cada cluster (identificador) correlativo desde el primer cluster hasta el EOF
- Se pone un caracter especial ($E5) al comienzo de cada entrada de Root. gracias a los LFN el proceso se complica un poco puesto que el nombre de un archivo ocupa una dimensión variable y por ende se debe calcular el numero de repeticiones del anterior proceso.
En este punto del proceso (esperando no haber obviado alguno), el archivo esta logicamente borrado la entrada del Root (nombre de archivo, su cluster inicial, su fecha de creación, sus atributos, etc, etc.), tampoco su contenido.
Para poder recuperar un archivo se debe "retroceder" considerando cada proceso comentado; lo primero es encontrar la posicion absoluta del disco donde se encuentra la entrada del archivo borrado... habiendo N ocurrencias realizamos éste proceso por todas para encontrar el archivo. Una vez encontrado un registro obtenemos el cluster inicial y habiendo calculado la cantidad de clusters que ocupaba el archivo (esto dividiendo su tamaño entre el tamaño de un cluster), revisamos si no ha sido ocupado ninguno de los clusters que ocupaba el mismo, como no podemos hacer más que suponer hemos revisamos un bloque contiguo. Con ello podemos notificar las probabilidades de recuperación del archivo, pero no podemos asegurarlo.
Luego de rellenar correlativamente las copias de FAT, corregimos el primer caracter del archivo en el Root y listo.
Tambien hay que considerar la posibilidad de archivos perdidos; ello sucede porque una carpeta (pseudo nodo) es eliminada y no asi directamente los archivos.
Con el sistema de archivos
NTFS la historia cambia puesto que esta orientado de diferente forma, primero se debe revisar su MFT como si fuese un archivo y proceder en busca de archivos borrados.
Saludos