Длинные имена файлов в Windows NT/2000

Обратите внимание, что в Windows NT/2000 псевдонимы имен файлов создаются иначе, чем в Windows 9x. Операционная система Windows NT/2000 использует для создания "короткого" имени файла первые шесть допустимых символов длинного имени и, если созданное имя уникально, добавляет символы ~ 1. Если же первые шесть символов уже используются другим файлом, то добавляются символы ~2. Для создания расширения Windows NT/2000 использует первые три допустимых символа после последней точки в длинном имени файла. Если после добавления символов ~5 появляется еще одно аналогичное "короткое" имя файла, то для создания следующих имен файлов используется такой алгоритм: длинное имя файла преобразуется в четыре шестнадцатеричных символа, которые помещаются после двух допустимых символов длинного имени и добавляются символы ~5. Таким образом, в Windows NT/2000 окончание ~5 появляется у всех псевдонимов файлов, а изменяются только шестнадцатеричные значения.

Совет

Вы можете отключить в системе VFAT механизм создания стандартного имени из длинного имени файла. Для этого в системном реестре добавьте двоичный параметр NameNumericTail в ветви HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem и установите его значение равным 0. Для возврата к использованию псевдонимов длинных имен файлов установите значение этого параметра равным 1.

VFAT хранит псевдонимы длинных имен в поле стандартных имен файлов записи каталога файлов. Таким образом, все версии DOS и Windows могут получить доступ к файлу под длинным именем с помощью его псевдонима. Остается еще одна проблема: как хранить 255 символов имени файла в 32 байтах записи каталога, ведь каждый символ имени файла — это один байт? Модифицировать структуру записи каталога нельзя, поскольку тогда предыдущие версии DOS не смогут использовать ее.

Разработчики файловой системы решили эту проблему следующим образом: были добавлены дополнительные записи каталога для хранения длинных имен файлов. Чтобы предыдущие версии DOS не повредили этих дополнительных записей каталога, VFAT устанавливает для них атрибуты, которые нельзя использовать для обычного файла: только для чтения, скрытый, системный и метка тома. Такие атрибуты DOS игнорирует, а следовательно, длинные имена файлов остаются "нетронутыми".

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

Старые программы для работы с диском, такие как Norton Disk Doctor, не могут работать с VFAT. Эти программы игнорируют дополнительные записи каталога. Поэтому после "восстановления" диска с помощью таких программ вы можете не найти длинных имен файлов.

Существует еще одна проблема с длинными именами файлов, которая заключается в следующем. VFAT создает новый псевдоним всякий раз при создании или копировании файла в новый каталог. Например, файл Expenses- January98.doc сохраняется в папке под псевдонимом EXPENS~1.DOC. Если с помощью программы Windows 9x Explorer скопировать этот файл в папку, в которой уже существует файл Expenses-December97.doc с псевдонимом EXPENS~1. DOC, то VFAT создаст в этой папке для копируемого файла новый псевдоним EXPENS~2 .DOC. Причем пользователь не будет уведомлен о таком "самоуправстве". Для программ, поддерживающих длинные имена файлов, такое копирование не проблема: все длинные имена файлов сохраняются. Если же запустить приложение, которое не поддерживает длинных имен файлов, то, открыв файл EXPENS~1 .DOC, пользователь обнаружит, что это файл Expenses-December97.doc, а не Expenses-January98.doc.

Замечание

При использовании VFAT я рекомендую применять дисковые утилиты, которые поддерживают эту файловую систему. Windows 9x содержит необходимые программы для проверки, восстановления, дефрагментации диска и резервного копирования. Кстати, при запуске старых дисковых утилит в Windows 9x вы будете предупреждены о возможных последствиях.

Если необходимо использовать длинные имена файлов со старыми программами, установите программу Lfnbk.exe с компакт-диска Windows 9x. Эта программа восстанавливает длинные имена файлов, но только в том случае, если структура каталога не изменялась.