Господа, хочу написать программу восстановления удаленных файлов. Не подскажете, какими методами это делают существующие программы и, возможно, ткнете носом туда, где можно почитать на эту тему чего-нибудь более менее вразумительное. Заранее благодарю за любую информацию.
Arvis Для этого надо изучить устройство файловой системы. Раз ты про это первый раз слышишь, может рановато такую сложную задачу брать. Никаких готовых средств для восстановления нет, если не считать журнал в NTFS, про который наверное тоже мало что известно. Придется посекторно читать диск и принимать решения -вот собственно и все. Чисто программно задачка простая, а вот "интеллектуальная" сторона проблемы - это необзримый космос.
valterg А кто говорил что первый раз слышу. С ФАТ и его устройством знаком давно. Вот с НТФС придется повоевать.
Тогда сходи сюда. Тут даже тексты есть для программ работающих с NTFS. http://www.sysinternals.com/ntw2k/information.shtml Есть какая-то книжка англицкая - ее тут все время склоняют. На том сайте есть на нее ссылка. В Paragon Manager есть Partion Explorer - в нем есть опция для просмотра MFT и других управляющих структур NTFS. И вот где-то видел утилиту, которая журнал операций NTFS выдает. Спрашивай и дальше - информации-то вагон, но теперь уж наверное этим заниматься не буду. Столько готовых утилит есть, что неохота "паровоз" делать.
для фата: 1) при удалении первый символ его забивается нулем => изменить его 2) исходя из размера файла и кластера вычислить необходимое число кластеров 3) если первый кластер удаленного файла уже занят => тогда ой. иначе занять его 4) занять нужное число последующих кластеров все. значительный минус - хрен восстановишь если файл был фрагментирован. ЗЫ: могу ошибаться.
valterg согласен чем больше файл - тем меньше шансы. но если: а) известного формата б) данные еще не затерты другими в) нужен _позарез_ г) на месте голова и руки то очень даже может быть... )
> Не подскажете, какими методами это делают существующие > программы про FAT готовить не буду, ибо во-первых, про нее уже много писано, а во-вторых она дышит на ладан. касательно NTFS. при удалении файла она в хидере файловой энти MTF сбрасывает атрибут флагов в ноль. имя файла не уродуется, цепочка кластеров (хранящася в run-list'е) тоже. меняем атрибут флагов в 1 и все будет ок. > возможно, ткнете носом туда, где можно почитать на эту > тему чего-нибудь более менее вразумительное. вот документация на NTFS http://linux-ntfs.sourceforge.net тут все написано. готовый восстановитель пищется буквально за пол-часа. NTFS не такая уж и сложная система вот, кстати, шикарный редактор диска, который это делает: http://www.runtime.org/gdbnt.zip > Раз ты про это первый раз слышишь, может рановато такую сложную задачу брать а чего здесь сложного? > Никаких готовых средств для восстановления нет этим занимаются сотни утилит. набери в осле "NTFS" и посмотри > журнал в NTFS, про который наверное тоже мало что известно описание его структуры легко найти в сети. ее уже давно расковыряли. но для восстановления удаленных файлов он не поможет... > Придется посекторно читать диск и принимать решения -вот собственно и все. читаем посекторно MFT, после чего разбираем ее структуру. благо она простая. видишь в начале сектора "FILE*", спускаешься 16h от начала, если два байта не равны нулю, идешь дальше. если же равны - тогда по смещению 14h извлекаешь ссылку на первый аттрибут. номер аттрибута лежит в первых четырех байтах, следом идет размер поля аттрибута. тебе нужен аттрибут 30h - имя файла. в нем имя в уникоде. если это имя файла нужного тебе - меняешь 14h с 0 на 1. сохраняешься и монитируешь/демонитруешь том, чтобы изменения возымели силу. если интересно, могу описать методику восстановления подробнее.
> gdbnt.zip - восстановитель диска оп-с! перепутал ссылки. но gdbnt - тоже хорошая программа, правда если встречает bad-сектор в MFT с воплем вылетает... P.S. вчера сонный был - после восстановления файла еще надо скорректировать битмап - карту свободного пространства диска, хранящуюся в одноименном файле в $MFT
вот ссылка на статью http://www.codeguru.com/Cpp/W-P/system/misc/print.php/c5723/ можь поможет чем нить.