после долгих исследований я наконец-то обнаружил, что имена путей не могут быть длиннее 256 символов даже в последней версии Microsoft Windows 7. Я действительно не понимаю, почему существует такое глупое ограничение, поскольку NTFS может обрабатывать путь до ~ 32 000 символов длина без проблем, так как более десятка лет! Нет ли возможности изменить это? Или есть какие-то практические решения, чтобы этого избежать?
260 символов - это очень мало для таких простых случаев использования, как некоторые вложенные каталоги с длинными именами файлов.
Ответы:
По словам 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
, я не знаю , как сказать , что есть что; возможно, запустите DOScommand.com
(опять же, если Windows 7 все еще может это сделать).источник
micros~1
, она становится случайной.Вы можете использовать короткие (8.3) имена для всех ваших папок и файлов.
Вы должны убедиться, что они включены, хотя.
(мой жирный)
Вам также придется написать некоторый код, чтобы получить короткое имя из длинного имени.
Источник
источник
Имя файла / каталога в NTFS ограничено 255 кодовыми точками Юникода, поскольку длина хранится в байтах. Но нет никакого ограничения общей длины пути.
Многие вызовы Win32 API (включая оболочку проводника) имеют ограничение длины 260-1. Некоторые другие вызовы могут использовать префикс \\? \ Для получения до 32 КБ (немного меньше, поскольку имя тома подставляется в Kernel-land)
источник