Ограничение имени пути в окне из 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.