6

Я знал много запрещенных и специальных символов в именах файлов и папок, которые невозможно использовать, иначе они могут вызвать проблемы позже.

Например, если поставить точку в конце имени, оно исчезнет.

Сам по себе Explorer имеет больше ограничений, например, очень трудно поставить точку в начале имени файла.

Хорошо, но что не так с at-sign @ !?
Я нигде не видел никаких ограничений по этому поводу, и я не мог найти это сейчас.

Увидеть:

1) Откройте Windows Explorer и создайте файл или папку с именем 1,1
2) Нажмите F2 и переименуйте его в @1,1
3) Видите? Новое имя было отменено.

Мой вопрос: ПОЧЕМУ?

Я протестировал эту "функцию" на XP, Win7 и Win10.
Забавная вещь в WinXP состоит в том, что переименование 0,0 в @0,0 фактически переименовывает его в @0 .

Похоже, это внутреннее поведение проводника, потому что в консоли CMD совершенно нормально делать cd.>"@1,1"

1 ответ1

8

Я не знаю, почему Explorer запрещает такие переименования, но, скорее всего, это связано с функцией локализации.

Различные части Explorer используют синтаксис @<DllName>,<ResourceID> для динамической загрузки локализованного текста - см. Перенаправление строк реестра. (Обратите внимание, что идентификатор ресурса всегда является десятичным числом, часто отрицательным.)

  • Например, описание ярлыков .lnk в реестре:@shell32.dll,-4153 , что означает «загрузить строку с идентификатором -4153 из файла shell32.dll». Поскольку файлы DLL могут иметь отдельную таблицу ресурсов для каждого поддерживаемого языка, результирующее описание будет переведено на любой язык отображения, установленный Windows.

  • Точно так же ваш рабочий стол; Документы; Фотографий; ... каталоги имеют скрытый файл desktop.ini содержащий:

    [.ShellClassInfo]
    LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21769
    IconResource=%SystemRoot%\system32\imageres.dll,-183
    

    Когда проводник увидит этот файл, он не просто покажет папку как "Рабочий стол" - он покажет переведенное имя.

Простое использование синтаксиса перенаправления в реальном имени файла / каталога ничего не изменит, но я предполагаю, что было запрещено предотвращать различные ошибки в случае, если программа каким-то образом смешивает "настоящие" и "отображаемые" имена. (Например, если вы назовете каталог @shell32.dll,-21769 , возможно, что программа с ошибками будет продолжать пытаться получить доступ к Desktop . Это может даже создать проблемы безопасности.)

Так что это будет похоже на различные другие имена, которые Windows разрешает, но Explorer не позволяет (например, .foo который является обычным "скрытым файлом" для Unixen, но может быть ошибочно принят за файл без имени (только расширение) некоторыми программами Windows).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .