Представьте, что вы удалили фотографии с карты памяти, а потом захотели их восстановить. Оказывается, что в некоторых случаях это возможно сделать, ведь когда мы удаляем фото кнопкой «delete», то что происходит на самом деле больше похоже не на удаление, а на забывание. Связи между байтами пропадают, но сама информация все еще находится в памяти, пока не будет перезаписана новыми фотографиями. Проходя курс CS50 (Harvard) — в конце четвертой недели нам выпало задание recover.c, в котором нам дается исходный файл карты памяти card.raw и нужно написать программу, которая восстановит все фотографии.
Цифровые камеры зачастую хранят фотографии друг за другом в соответствии с файловой системой FAT, где вся информация разделяется на блоки одинакового размера по 512 байт. И каждая фотография записывается при помощи этих блоков. Учитывая, что фотографии могут незначительно отличаться по размеру друг от друга, но при этом записываться одинаковым количеством блоков, позволяет написать код, который последовательно пройдет по каждому блоку памяти карты и скопирует эти данные в новые файлы. «Лишние» байты называются «незанятым пространством», и в нем может сохраниться что-то даже из древних фотографий. Читать далее →