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