Отключаем ограничение на максимальную длину пути в Windows (260 символов)

В 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. По умолчанию этот параметр отключен. Чтобы включить его:

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

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

reg add "HKLMSYSTEMCurrentControlSetControlFileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f

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

Дело в том, что приложение должно быть специально разработанным для работы с длинными путями и в его манифесте должна быть включена опция longPathAware. Проверить поддерживает ли конкретное приложение работу с длинными путями можно по его манифесту. Иногда это бывает отдельный XML файл, хранящийся в каталоге приложения, или (чаще всего) манифест зашит в исполняемый EXE файл.

Проще всего исследовать манифест в исполняемом файле приложения с помощью утилиты Resource Hacker. Например, я открыл исполняемый файл Acrobat Reader (AcroRd32.exe) в Resource Hacker. Нужно развернуть ветку ресурса Manifest и в XML описании выполнить поиск строки longPathAware. В этом примере, наличие строки <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.

Если вам нужно выполнить какие массовые операции с файлами с большой длиной пути (удаление, перемещение, копирование), которые не позволяет выполнить проводник Windows, можно использовать альтернативные файловые менеджеры, такие как FAR, 7-Zip File manager и т.д. Или утилиты командной строки, такие как robocopy, xcopy или PowerShell.

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


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *