73

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

4 ответа4

123

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

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

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

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

,_. проблемы

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

22

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

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

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

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

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.)

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.

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

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