В Windows есть известный анахронизм, ограничивающий максимальную длину пути к файлу или папке 260 символами. Проводник Windows (File Explorer) и многие приложения не умеют с такими длинными именами файлов. При попытке создать, сохранить, скопировать или переместить папки/файлы с путями, превышающими лимит, пользователь может получать ошибки вида « path too long «, « слишком длинный целевой путь «, « указано неправильно или слишком длинное имя файла » и т.п.
Данное ограничение накладывается не файловой системой NTFS, а Win32 API, в котором определяется максимальная длина пути (MAX_PATH) 260 символов. Это включает в себя букву диска (например, E: , занимающую 3 символа), путь к папке, имя файла и невидимый завершающий NULL -символ (1 символ). Таким образом максимальное имя файла/папки может быть 256 символов (подробнее о проблеме и обходных способах ее решения рассказано здесь).

Начиная с Windows 10 (1607) и Windows Server 2016, доступен отдельный параметр групповых политик, позволяющий включить поддержку длинных путей в Windows. По умолчанию этот параметр отключен. Чтобы включить его:
- Откройте редактор локальной GPO (
gpedit.msc) - Перейдите в ветку Computer Configuration -> Administrative Templates -> System -> Filesystem (Конфигурация компьютера -> Административные шаблоны -> Система -> Файловая система)
- Включите параметр Enable Win32 long paths (Включить длинные пути Win32)

- Чтобы применить эту настройку, нужно перезакрузить компьютер.
Либо можно включить параметр, обеспечивающий поддержку длинных путей напрямую через реестр:
reg add "HKLMSYSTEMCurrentControlSetControlFileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f

Итак, вы включили поддержку длинных путей в Windows, однако это не означает, что теперь все программы будут корректно работать с путями, превышающими лимит.
Дело в том, что приложение должно быть специально разработанным для работы с длинными путями и в его манифесте должна быть включена опция longPathAware. Проверить поддерживает ли конкретное приложение работу с длинными путями можно по его манифесту. Иногда это бывает отдельный XML файл, хранящийся в каталоге приложения, или (чаще всего) манифест зашит в исполняемый EXE файл.
<ws2:longPathAware>true</ws2:longPathAware> означает, что Acrobat Reader поддерживает длинные пути и будет корректно работать с такими файлами после включения политики LongPathsEnabled.
Старые или специализированные программы могут по-прежнему конфликтовать с длинными путями. Тот же редактор Microsoft Word и другие программы пакета Office не поддерживают длинные пути. Более того, проводник Windows (File Explorer) также до сих пор (!!!) не поддерживает работу с объектами путь к которым превышает значение MAX_PATH Win32 API.
Для обхода ограничения Win32 API многие приложения сразу разрабатываются для использования абсолютный путь к файлу, на который не действует ограничение MAX_PATH. В этом UNC формате путь к файлу будет выглядеть так: \?C:SomeLongPathLongNameFile.txt
Если ваше приложение не поддерживает режим longPathAware, можно использовать формат пути с префиксом \? для доступа к файлам. Это позволит обойти ограничение MAX_PATH.

Естественно, использовать глубокую вложенность папок и/или очень длинные имена файлов – это плохая практика, с которой я в последнее время встречаюсь крайне редко. Такой проблемой обычно грешат пользователи файловых серверов, создавая сложные иерархические структуры каталогов. Как вариант, можно отслеживать максимальную длину пути на файловые серверах с помощью скриптов и бороться с этой напастью организационно.

Добавить комментарий