Ограничение имени пути в окне из 256 символов


17

после долгих исследований я наконец-то обнаружил, что имена путей не могут быть длиннее 256 символов даже в последней версии Microsoft Windows 7. Я действительно не понимаю, почему существует такое глупое ограничение, поскольку NTFS может обрабатывать путь до ~ 32 000 символов длина без проблем, так как более десятка лет! Нет ли возможности изменить это? Или есть какие-то практические решения, чтобы этого избежать?

260 символов - это очень мало для таких простых случаев использования, как некоторые вложенные каталоги с длинными именами файлов.


1
Я думаю, что беспокоит то, что есть старые программы, которые твердо представляют, как долго должен быть путь, так что, если вы попытаетесь использовать их на более длинных путях, они взорвутся интересными способами.
Дсолимано

У ОС Linux есть эта проблема?
ахорн

Ответы:


18

По словам Microsoft:

  • Традиционный Windows API ограничивает имена путей до 260 символов, даже для приложений, разработанных для последней версии.

  • Приложения, использующие API с поддержкой Unicode, могут использовать форму пути, которая позволяет использовать до 32767 символов. Имя файла должно начинаться с префикса \\?\и должно быть абсолютным путем, например, \\?\c:\dir\fileили \\?\UNC\server\share\file. Есть дополнительные ограничения, см. Ссылку для деталей.

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

  • Используйте mklinkкоманду для создания символических ссылок и передайте путь, который использует их, вашему приложению.

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

  • Запустите ваше приложение из глубокого каталога и передайте ему короткие относительные пути.

  • Заменить некоторые длинные имена их 8.3 псевдонимов ( micros~1), предполагая , что те все еще существует в Windows 7. Если у вас есть micros~1рядом micros~2, я не знаю , как сказать , что есть что; возможно, запустите DOS command.com(опять же, если Windows 7 все еще может это сделать).


3
Что ж, даже Windows Explorer из Win7, похоже, использует традиционный API! Какая жалость.

3
Еще больше обратной косой черты `\\? \` :-)
Кольцо Ø

@Gilles, micros ~ 1 и micros ~ 2 стандартизированы по всем системам или это случайно?
Pacerier

@Pacerier Какая бы директория не была создана первой micros~1, она становится случайной.
Жиль "ТАК - перестань быть злым"

0

Вы можете использовать короткие (8.3) имена для всех ваших папок и файлов.

Вы должны убедиться, что они включены, хотя.

Под длинным именем файла понимается любое имя файла, которое превышает короткое соглашение по именованию в стиле MS-DOS (также называемое 8.3). Как правило, Windows хранит длинные имена файлов на диске в виде специальных записей каталога, которые можно отключить в масштабе всей системы по соображениям производительности в зависимости от конкретной файловой системы. Когда вы создаете длинное имя файла, Windows может также создать короткую форму имени 8.3, называемую псевдонимом 8.3, и также сохранить ее на диске. Этот псевдоним 8.3 можно отключить для указанного тома.

(мой жирный)

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

Источник


2
LOL ... Я хорошо помню эти дни в Windows 95, когда мы все получили этот суперский FAT32 с именами из 256 символов! Это было фантастически (в наши дни), и я действительно шокирован, что ограничения имен файлов все еще могут быть проблемой в эти дни. 2010! Windows действительно архаична ...

0

Имя файла / каталога в NTFS ограничено 255 кодовыми точками Юникода, поскольку длина хранится в байтах. Но нет никакого ограничения общей длины пути.

Многие вызовы Win32 API (включая оболочку проводника) имеют ограничение длины 260-1. Некоторые другие вызовы могут использовать префикс \\? \ Для получения до 32 КБ (немного меньше, поскольку имя тома подставляется в Kernel-land)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.