КОРОТКИЕ ИМЕНА DOSВ старые добрые времена в операционной системе DOS имена файлов были совсем простые. Эти имена могли состоять не более чем из восьми символов. К этому совсем короткому имени можно было добавить "расширение" - еще три символа. А чтобы сразу было видно, где кончается имя и начинается расширение, перед расширением ставилась точка. Такой формат имени так и назывался - "формат 8.3". В каталогах файловой системы такое имя занимало всего 11 байт. Совсем немного, и это хорошо, ведь память у персональных компьютеров в те времена была совсем коротенькая.
Для нашего разговора про имена файлов важно еще будет обратить
внимание, что в именах с форматом 8.3 точка могла встретиться
только один раз, а пробелы в имени вообще не допускались. И это очень
правильно, насчет пробелов. Ведь ежели позволить вставлять пробелы
внутри имени, то как же тогда было бы неудобно перечислить несколько
имен файлов, например, в командной строке. (В командной строке
в качестве разделителя используется пробел).
Но время шло, расширялись возможности персональных компьютеров, расширялся и круг их пользователей. И новые пользователи на новых компьютерах очень хотели иметь вместо файлов - документы, а вместо условных обозначений по формату 8.3 видеть полные названия этих документов. Достаточно длинные названия, причем непременно из нескольких слов. Вот так и появились в операционной системе Windows длинные имена файлов. Предельный размер для имени файла, который возможен в Windows, нигде не оговорен, по крайней мере, мне так и не удалось этого найти. Но вот длина для полного пути к файлу, в котором перед именем файла указаны все имена директорий и поддиректорий, эта длина имеет строгое ограничение. Программисты знают это ограничение как константу MAX_PATH, которая равна 260 (символов). Пожалуй, стоит здесь привести какой-нибудь пример полного пути, в котором имя файла достаточно длинное, подобрать что-нибудь этакое с жесткого диска моего компьютера. Вот попались два файла с очень похожими именами: E:\57\Executable modules\FE57 File Inspector ver.2.0.exe E:\57\Executable modules\FE57 File Inspector ver.2.2.exe КОРОТКИЕ АЛЬТЕРНАТИВНЫЕ ИМЕНА WINDOWSВ операционной системе Windows всегда стояла проблема "наследства": в новых версиях операционной системы должны оставаться работоспособными все программы, написанные для старых версий. В частности это значит, что те программы, которые были созданы для DOS, должны правильно работать под Windows. Поэтому для длинных имен файлов был придуман вариант с превращением этих длинных имен в короткие имена с форматом 8.3. Такие имена в Windows принято называть альтернативными. Windows создает в каталоге альтернативное имя для файла или директории, если основное имя не укладывается по длине в короткий формат 8.3, или если в основном имени есть пробелы, или если основное имя содержит более одной точки. В остальных случаях потребность в альтернативном имени не возникает. Альтернативное имя составляется из первых символов основного имени. Если в некоторой директории есть несколько файлов с одинаковым началом основного имени, то альтернативные короткие имена будут отличаться цифрами в конце имени. Так короткий вариант имен для нашего примера получится такой: E:\57\EXECUT~1\FE57FI~1.EXE E:\57\EXECUT~1\FE57FI~2.EXE КАК В WINDOWS КОРОТКИЕ ИМЕНА СВЯЗАНЫ С ДЛИННЫМИТеперь внимание, очень важный момент, попробуйте определить, какое короткое имя в нашем пример какому длинному соответствует. Для удобства выпишем это соответствие и поставим рядом еще и размер файлов. "... ver.2.0.exe" FE57FI~1.EXE 127488 "... ver.2.2.exe" FE57FI~2.EXE 129536 Проделаем такой опыт. Сначала получим через программу FE57 контрольные суммы для этих двух файлов. При этом в диалоге "Опции - Проверка файлов" мы сообщим программе, что нам необходимы короткие имена в получаемом файле данных. Итак, у нас есть файл данных, в котором для двух файлов, с которыми мы делаем опыт, записаны их имена (короткие), размеры и контрольные суммы. Затем скопируем два наших файла в другую директорию. И теперь проверим через FE57 сохранность файлов после копирования. Для проверки мы используем полученный ранее файл с данными. В протоколе проверки мы увидим: E:\57\PROBA\FE57FI~1.EXE 129536 - Длина не совпадает Прежняя длина 127488 Прежняя сумма c4 dd 55 55 a3 Сейчас длина 129536 Сейчас сумма e0 c4 a9 86 1d Дата файла: 06.06.2004 22:33:34 E:\57\PROBA\FE57FI~2.EXE 127488 - Длина не совпадает Прежняя длина 129536 Прежняя сумма e0 c4 a9 86 1d Сейчас длина 127488 Сейчас сумма c4 dd 55 55 a3 Дата файла: 28.07.2003 03:57:06 Нетрудно видеть, результат такой, что файлы почему-то поменялись местами. Впервые с подобным явлением мне пришлось столкнуться года три назад, когда нужно было проверить качество записи очень ответственного компакт диска. А у меня тогда была только старая DOS-овская версия программы FE57, которая работала только с короткими именами файлов. Итак, делаем вывод. Windows создает альтернативные короткие имена в каждой директории по своему. При этом оказывается существенным, в каком порядке файлы расположились в каталоге. Признаюсь, мне пришлось немного схитрить, делая копирование двух файлов из одной директории в другую, мне было заранее известно, в каком порядке их нужно копировать, чтобы получить приведенную выше иллюстрацию к этой заметке.
Примечание. Эта заметка будет неполной, если ничего не сказать о больших и малых буквах в именах файлов и директорий. В операционной системе Windows большие и малые буквы в именах файлов и директорий считаются одинаковыми. Для операционных систем семейства UNIX (в частности, для LINUX) традиция другая, там большие и малые буквы в именах - это разные буквы. На этом различии иногда спотыкаются начинающие разработчики сайтов, когда после переноса страничек со своего компьютера на веб-сервер у них вдруг перестают работать некоторые ссылки. Так как дома у большинства пользователей стоит Windows, а держатели серверов часто отдают предпочтение системе UNIX.
Windows сохраняет в каталоге файловой системы большие и малые буквы
в именах файлов (и директорий) в том виде, как это было определено
при создании файла. Но альтернативные короткие имена всегда состоят
только из больших букв.
В программе FE57 имеются настройки, определяющие правила работы с именами файлов и директорий. Для большинства случаев практического применения программы FE57 можно эти настройки поставить в такое положение, какое показано на картинке ниже. И больше эти настройки никогда не трогать. Первоначально, все эти тонкости пришлось в программе предусмотреть, чтобы обеспечить преемственность со старой DOS-овской версией программы. Но в дальнейшем оказалось, что такие настройки все же интересно в программе сохранить. Во-первых, это удобный способ разобраться с особенностями альтернативных коротких имен Windows. А во-вторых, короткие имена в протоколе обычно выглядят более аккуратно. Ниже излагаются те правила, которые применяются в программе FE57 для работы с именами файлов и директорий. По этим правилам имена могут быть взяты либо из исходных данных, либо из каталога файловой системы. Когда имя берется из каталога, то может быть взято либо основное (длинное) имя, либо альтернативное (короткое) имя. Если имя берется из исходных данных, то оно будет взято в точности в том виде, к каком оно было записано прежде в файле данных. Это могло быть длинное или короткое имя, а также могли быть варианты с большими или малыми буквами в имени. Альтернативное имя берется только в том случае, если Windows вообще такое имя создает. То есть, если основное имя по длине не укладывается в короткий формат 8.3, или если в основном имени есть пробелы, или если в основном имени есть более одной точки. В остальных случаях никакого альтернативного имени просто не существует. Установка настроек производится в диалоге "Опции - Проверка файлов", во второй части этого диалога.
Во второй части этого диалога есть два переключателя, задающие правила работы с именами файлов и директорий. Первый переключатель
Второй переключатель
Действует следующая логика при выборе имен
Вы еще не совсем запутались, прочитав все это? А мне пришлось, чтобы все это правильно записать, копаться по исходным текстам. Пожалуй, это очень даже не правильно, если автор и сам плохо помнит, как работают сделанные им кнопки. Может лучше будет их вообще из программы выбросить?
Однако, у меня теперь есть где прочитать и все это быстро вспомнить ;-)
|