вторник, 16 февраля 2010 г.

Почему файлы и каталоги без даты и времени не сортируются правильно Проводником?

Это перевод Why do files and directories with no time/date mess up sorting in Explorer? Автор: Реймонд Чен.

Если у вас есть файл или каталог, у которого нет времени последнего изменения, вы можете обнаружить, что Проводник не умеет сортировать такие элементы (как вы можете создать файл или папку без даты последнего изменения? Ну, это тяжело сделать; вам потребуется помощь внешней файловой системы). Почему это так?

Как мы уже видели ранее, функция сортировки должна задавать полный порядок, чтобы производить осмысленную сортировку. Проблема в том, что компаратор Проводника неверно обрабатывает (mis-handles) файлы и каталоги без даты последней модификации.

Чтобы понять почему это так, вам нужно знать про т.н. "простые PIDL-ы" ("simple PIDLs"). Простой PIDL - это PIDL, который ссылается на файл или папку, которые не существуют (при.пер.: точнее - PIDL, который обрабатывается без верификации по диску).

Проблема в том, что корректный файл или каталог без даты последней модификации выглядит точно так же, как простой PIDL, потому что Проводник использует дату последней модификации, чтобы разделять реальные и простые PIDL.

Проблема с сортировкой происходит, когда приходит время решить, куда же следует поместить эти "настоящие PIDL-ы, принимаемые за простые" в отсортированном списке. Проводник пытается группировать папки вместе, но если он видит "простой PIDL", то он не может сказать, является ли он файлом или папкой (в конце концов, несуществующее нечто не является ни файлом, ни папкой), и поэтому его компаратор выдаёт непоследовательные результаты.

Мораль истории: будьте осторожны в своих функциях сравнения для сортировки. Если вы возвращаете противоречивые результаты в своей функции сортировки, то вы получаете неправильный вывод сортировки.

Прим.пер.: а, может быть, мораль в том, что были правы люди, делающие поле "Пол" в БД не логическим (шутка).

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

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

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

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

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

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

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