воскресенье, 27 декабря 2009 г.

Вы можете создать бесконечное рекурсивное дерево каталогов

Это перевод You can create an infinitely recursive directory tree. Автор: Реймонд Чен.

Возможно создать бесконечное рекурсивное дерево каталогов. Это приведёт к хаосу во многих функциях просмотра структуры каталогов. Вот, как вы можете это сделать (примечание: требует NTFS).

Создайте папку в корне вашего диска C:, назовите её, в отсутствие более креативного имени, C:\C. Правый щелчок по "Мой Компьютер", выберите "Управление", щёлкните по оснастке "Управление дисками".

В "Управлении дисками" щёлкните правой по диску C и выберите "Изменить букву диска или путь к диску...".

В диалоге изменения буквы диска нажмите "Добавить" и, где он говорит "Подключить том как пустую NTFS-папку", введите "C:\C". Закройте все диалоги.

Поздравляю - вы только что создали на диске бесконечную рекурсию папок.
C:\> dir
 
 Volume in drive has no label
 Volume Serial Number is A035-E01D
 
 Directory of C:\
 
08/19/2001  08:43 PM                 0 AUTOEXEC.BAT
12/23/2004  09:43 PM    <JUNCTION>     C
05/05/2001  04:09 PM                 0 CONFIG.SYS
12/16/2001  04:34 PM    <DIR>          Documents and Settings
08/10/2004  12:00 AM    <DIR>          Program Files
08/28/2004  01:08 PM    <DIR>          WINDOWS
               2 File(s)              0 bytes
               4 Dir(s)   2,602,899,968 bytes free
 
C:\> dir C:\C
 
 Volume in drive has no label
 Volume Serial Number is A035-E01D
 
 Directory of C:\C
 
08/19/2001  08:43 PM                 0 AUTOEXEC.BAT
12/23/2004  09:43 PM    <JUNCTION>     C
05/05/2001  04:09 PM                 0 CONFIG.SYS
12/16/2001  04:34 PM    <DIR>          Documents and Settings
08/10/2004  12:00 AM    <DIR>          Program Files
08/28/2004  01:08 PM    <DIR>          WINDOWS
               2 File(s)              0 bytes
               4 Dir(s)   2,602,899,968 bytes free
 
 
C:\> dir C:\C\C\C\C\C\C
 
 Volume in drive has no label
 Volume Serial Number is A035-E01D
 
 Directory of C:\C\C\C\C\C\C
 
08/19/2001  08:43 PM                 0 AUTOEXEC.BAT
12/23/2004  09:43 PM    <JUNCTION>     C
05/05/2001  04:09 PM                 0 CONFIG.SYS
12/16/2001  04:34 PM    <DIR>          Documents and Settings
08/10/2004  12:00 AM    <DIR>          Program Files
08/28/2004  01:08 PM    <DIR>          WINDOWS
               2 File(s)              0 bytes
               4 Dir(s)   2,602,899,968 bytes free
Вперёд: добавляйте столько "\C", сколько захотите. Вы всегда будете получать ваш диск C.

Окей, теперь, когда вы вдоволь навеселились - идите обратно в "Изменить букву диска или путь к диску..." для диска C: и удалите запись с "C:\C". Сделайте это до того, как вы создадите хаос на машине.

Теперь представьте, что случится, если вы попытаетесь сделать рекурсивную копию этого загадочного каталога C:\C. Или если вы запустите любую программу, которая захочет сделать любую рекурсивную операцию с ним - например, подсчитать размеры всех файлов.

Если вы пишете такую программу, вам нужно быть в курсе существования reparse point (это та штука, которая показывалась как <JUNCTION> в листинге каталога). Вы можете опознать их, т.к. их файловые атрибуты включают в себя флаг FILE_ATTRIBUTE_REPARSE_POINT. Конечно же, что вам нужно делать, когда вы найдёте его - зависит целиком от вас. Я просто предупреждаю вас, что такие странные вещи действительно существуют, и если вы не будете осторожны, ваша программа может войти в бесконечный цикл.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.