Почему нельзя назвать папку «._.» В Windows 7?

74

Я только что заметил, что невозможно назвать папку ._.- она ​​получает имя ._вместо. Иногда он исчезает сразу после присвоения ему имени, но появляется снова после обновления представления. В Windows, похоже, есть проблема с точками в конце имени файла - почему это так?

черный
источник
21
Стоит отметить, что вы наткнулись на «хак» для запуска имени файла .в Windows.
jpmc26
8
@ThisNameBetterBeAvailable Не проверено, но cd -- -_-может работать. --Является общим «конец опций» маркера.
TripeHound
13
@ThisNameBetterBeAvailable Нет, само --по себе означает « это конец опций, рассматривайте все, что начинается с -буквального значения ». Только что проверил: mkdir -- -_-и cd -- -_-работает как я ожидал.
TripeHound
2
Как вариант, ./-_-должно работать так же.
glglgl
5
@Alexander В Linux, поскольку, похоже, именно туда и направлялись комментарии, cd "-_-"оболочка использует кавычки для группировки, но не рассматривает их как часть аргумента; это ошибки сinvalid option
Изката

Ответы:

123

Windows обычно требует, чтобы файлы не имели расширения или имели длину не менее одного символа; это не круто с расширениями нулевой длины, то есть именами файлов, которые заканчиваются .. Папки тоже могут иметь расширения, поэтому Windows не позволяет их именам заканчиваться на .. Источник из статьи, на которую ссылается DavidPostill :

Используйте точку для отделения имени базового файла от расширения в имени каталога или файла .

(Подчеркните мое.) Если вы попытаетесь завершить файл или каталог с именем точкой, Windows просто предполагает, что вы не хотите расширений, и удаляет его, даже если вы создаете его с mdпомощью командной строки.

Опасная зона! Если вы хотите, чтобы имя папки заканчивалось на конце ., вам нужно использовать волшебную необработанную последовательность переопределения имени \\?\. В командной строке md \\?\C:\path\to\container\._.действительно создаст папку с именем ._., но у многих программ будут проблемы с ней, даже в Explorer:

._.  проблемы

Такой каталог может быть удален только с rdпоследующим его \\?\именем или переименован с коротким (8.3, dir /x) именем.

Бен Н
источник
1
Спасибо за ваш подробный ответ! :) Я думаю, что это была бы идеальная папка для скрытия секретных вещей, таких как пароли, внутри нее, потому что вы можете открыть папку, только если вы сначала переименуете ее, и не все знают, как ее переименовать.
Черный
19
@ EdwardBlack это не остановит любого, кто сможет прочитать обмен стека (и, следовательно, даже не обеспечит защиту от гипотетического младшего брата). Имя, данное, dir /xделает его довольно простым, и в других случаях это имя удобно.
Крис Х
11
FWIW, инструменты командной строки Cygwin также могут создавать (и манипулировать) такими каталогами в Windows 7 без использования волшебной последовательности.
Стив Джессоп
4
@ EdwardBlack Как отметил Крис Х, это не очень секретно, поэтому не стоит хранить что-то особенно важное в такой папке. Кроме того, цифровая секретность и защита - это проблема, которая решалась много раз. Вы можете использовать любое количество методов и программ шифрования для обеспечения безопасности, не полагаясь на непонятные имена папок.
Крис Харпер
3
Nitpick: По крайней мере, за 8,3 дня (я не исследовал, что записывается на диск в NTFS), период никогда не записывался на диск. Имя было разделено на имя и расширение, они хранились отдельно. После прочтения он взял имя и, если было расширение, добавили точку и расширение к имени. Таким образом, не было никакого способа выразить ._. в структуре каталогов, конечно, вы потеряли конечную точку.
Лорен Печтел
22

Кажется, в Windows есть проблема с точками в конце имени файла? Почему это?

Не заканчивайте имя файла или каталога пробелом или точкой. Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс этого не делают.

Ссылка на источник ниже содержит более подробную информацию о правилах именования.

Файлы имен источников , пути и пространства имен

ДэвидПостилл
источник
5
Это все еще звучит как ошибка для меня.
ralu
@ralu Если это ошибка, то MS кажется совершенно неинтересной в ее исправлении. Эти ограничения были там начиная с Windows XP (если не раньше).
DavidPostill
Windows XP? Я предполагаю, что эти ограничения коренятся в MS-DOS 0.x - давайте попросим мистера Гейтса прояснить проблему ...
Кристиан Северин
17

Это не ошибка. Это сделано для предотвращения проблем совместимости.
Это пережиток старых дней DOS.

Файловые системы FAT12 (floppy) и FAT16 (FAT16 до поддержки длинных имен файлов, представленных в Windows 95) имели только имена файлов, хранящиеся в 11 байтах:
8 байтов для имени, 3 для расширения. «Период» между именем и расширением даже не был сохранен. Это подразумевалось и автоматически добавлялось для целей отображения.
Каталоги вообще не имеют расширений. Вместо этого 3 байта для расширения были заполнены символами "$" (которые были недопустимы в реальных именах).
Поскольку Windows по-прежнему совместима с этим проводником, а многие другие компоненты Windows автоматически отключают завершающий период, чтобы предотвратить возникновение проблем совместимости.
Как уже говорили другие, вы можете обрабатывать такие папки, используя семантику RAW (префикс \\? \ Перед абсолютным именем пути).
За кулисами NTFS и сетевые файловые системы не имеют проблем с такими файлами и папками. Это всего лишь случай, когда Explorer пытается помешать пользователю создать что-то, что может вызвать проблемы для другого программного обеспечения.

(На самом деле есть и другие остатки:
имена файлов, такие как COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON, могут вызывать аналогичные проблемы, когда Explorer и многие другие компоненты Windows запутываются потому что эти имена являются «зарезервированными» именами, которые также относятся к эпохе DOS.)

Tonny
источник
3
Для любых других читателей, которые изначально были недоверчивы в отношении того, что точка не сохраняется: это верно для CP / M и всех версий FAT, включая FAT16 и FAT32 .
Бен Н
1
Я помню какую-то старую программу для DOS (работающую в реальной DOS, возможно, использующую функции INT13), которая однажды сильно огорчила меня тем, что каким-то образом удалось создать файл с именем: foo.bar на диске c: ...
rackandboneman
2
@BenN: на самом деле, в FAT32 все немного по-другому; он хранит как короткое имя файла (8 + 3 байта с обратно совместимыми именами «неявная точка»), так и длинное имя файла (часто называемое LFN), состоящее из 255 символов UCS-2 с явной точкой, и, если только вы работаете с 16-битными приложениями, вы всегда работаете с LFN.
Маттео Италия
1
@MatteoItalia Насколько я понимаю, длинные имена файлов хранятся в записях поддельных файлов; Известные установки Windows ищут эти записи и, если возможно, отображают их вместо SFN. См. Статью Рэймонда Чена на эту тему , или часть VFAT спецификации формата FAT32, которую я связал выше.
Бен Н
1
-1 вы ошиблись насчет расширений каталога; может быть, это было так для CP / M (у меня не хватает памяти об этой ОС), но я использовал директорию «programm.ing» в своем дереве со времен DOS, и вижу win.tue.nl/~aeb/linux/ fs / fat / fat-1.html - записи каталога обрабатываются точно как файлы, они также могут иметь имя 8.3. Тест: создайте каталог 8.3 ( mkdir testfile.name) и отобразите его имя DOS в Windows ( dir /x) - вы получите TESTFI~1.NAM, как и ожидалось.
vaxquis
3

Проблема здесь в том, что Windows (DOS) допускает 8.3 имен файлов в файловых системах FAT. Значение 8 символов, а затем. следуют три символа. Unix и Linux допускают любой символ, кроме / и \ 0. \ 0 - символ конца строки C, а / - разделитель каталога. Все остальное можно использовать.

Windows 95 обошла эту проблему, поддерживая базу данных коротких (8.3) имен файлов в метаданных длинных имен файлов (LFN). Если вы стерли файлы ОС Windows 95, при следующей установке Windows 95 у вас останутся файлы со странными именами на диске. Например, «Мои документы» может иметь имя MYDOCU ~ 1 на диске. Очевидно, что если вы потеряете метаданные, вы не сможете легко их преобразовать.

Оболочка должна справляться со многими историческими приростами, которые существуют со времен MS-DOS.

Надеюсь это поможет

Эд Невилл
источник
1
На самом деле не было базы данных; Windows просто заклинило части длинного имени файла на диск в виде поддельных файлов. Смотрите пост Раймонда Чена на эту тему .
Бен Н