Главная | Программы | Статьи | Гостевая | Мыло |

Удаление неудаляющейся папки или удаление вручную

Бывали ли у вас случаи, когда какая-то пустая папка не удалялась. Думаю, что да. Раз так, то эта статья для вас.

Необходимые инструменты:

  • Программа WinHex
  • Немного ума и смекалки

Теория
____Для того, чтобы удалить папку нужно хоть немного представлять себе хранение этой папки на жестком диске (для дискет все то же самое). Итак, папка представляет собой запись на диске, длинной в 32 байта для FAT32 и 64 для NTFS. Первые восемь байт (смещение +0) содержат имя папки, следующие три байта (смещение +8 соответственно) содержат расширение файла (для папки это будет выглядеть как 202020h). А теперь самое интересное: папка с обычным именем (восемь байт на имя и три - на расширение) отводится 32 байта. В байте со смещением +11 содержится атрибут папки (файла). Если атрибут равен 0Fh, то система считает, что здесь содержится длинное имя. Длинное имя кодируется в Unicode и записывается в обратном порядке. За одной или несколькими записями с длинным именем должна следовать запись с обычным именем, содержащим знак ~ (тильда). Здесь содержится также остальная информация о файле. Как видите, алгоритм просмотра каталога с выявлением информации о файле весьма прост.
____Предоставляю вашему вниманию таблицу с структурой записи каталога.

Смещение Размер Содержимое
(+0) 8 Имя файла или каталога, выровненное на левую границу и дополненное пробелами
(+8) 3 Расширение имени файла, выровненное на левую границу и дополненное пробелами
(+11) 1 Атрибут файла
(+12) 2 Время доступа
(+14) 2 Время создания
(+16) 2 Дата создания
(+18) 2 Дата доступа
(+20) 2 Два старших байта номера первого кластера файла
(+22) 2 Время модификации файла
(+24) 2 Дата модификации файла
(+26) 2 Два младших байта номера первого кластера файла
(+28) 4 Размер файла в байтах

____Как видите, все байты 32-байтной записи каталога теперь заняты. А теперь посмотрите на последнюю графу таблицы - размер файла в байтах: 4 байта, а что если длина файла больше 4-х байт? Разумеется, в этом случае следует считать, что в каталоге хранятся младшие байты длины, а полную длину легко определить, обратившись к таблице размещения файлов. Но согласитесь, что это уже явная недоработка. Иное дело в файловой системе NTFS, поддерживаемой Windows NT. Здесь для индексации кластеров используются 64-битные поля.

Практика
____Потрепали языком и хватит, я, надеюсь, у вас глаза не опухли от такой информации :)? Нет, ну тогда приступим. Запускаем программу WinHex, у меня версия 10.4, вылезает окно Start Center. Жмем Open Disk и выбираем диск, на котором мы будем удалять папку (пустую!). Далее идем в меню Search и ищем название папки в DOS формате плюс три пробела (3 пробела - пустое расширение. Например: Имя папки-PAPKAPAPKA, то искомое имя буде выглядеть так "PAPKAP~1   ". Без кавычек). Проверяем, чтоб на +11 смещении было 10h (означает, что это папка). Теперь идем на +0, и начиная отсюда до +32 (две строчки) заполняем все это дело нулями (можно сделать проще: в смещении +0 записать E5h, что означает, что файл или папка стерт(а)). Сохраним. Все готово! Теперь нужно только проверить диск на наличие ошибок.

Скачать пример в текстовом варианте.

Возможно, остались вопросы по поводу временных характеристик (смещения от +12 до +24) - пишите на E-Mail с темой "DelDirTime"

З.Ы. Автор не несет никакой ответственности за испорченную или утерянную информацию. Советую сначала потренироваться создавать и удалять папки на дискете.

Публикация статей возможна только при наличии ссылки на winalex2006.narod.ru