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

В Windows есть известный анахронизм, ограничивающий максимальную длину пути к файлу или папке 260 символами. Проводник Windows (File Explorer) и многие приложения не умеют с такими длинными именами файлов. При попытке создать, сохранить, скопировать или переместить папки/файлы с путями, превышающими лимит, пользователь может получать ошибки вида « path too long «, « слишком длинный целевой путь «, « указано неправильно или слишком длинное имя файла » и т.п.

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

Ошибка слишком длинный целевой путь в проводнике windows

Начиная с Windows 10 (1607) и Windows Server 2016, доступен отдельный параметр групповых политик, позволяющий включить поддержку длинных путей в Windows. По умолчанию этот параметр отключен. Чтобы включить его:

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

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

reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f

параметр реестра LongPathsEnabled

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

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

Проще всего исследовать манифест в исполняемом файле приложения с помощью утилиты Resource Hacker. Например, я открыл исполняемый файл Acrobat Reader (AcroRd32.exe) в Resource Hacker. Нужно развернуть ветку ресурса Manifest и в XML описании выполнить поиск строки longPathAware. В этом примере, наличие строки <ws2:longPathAware>true</ws2:longPathAware> означает, что Acrobat Reader поддерживает длинные пути и будет корректно работать с такими файлами после включения политики LongPathsEnabled.

longPathAware в манифесте приложений

Старые или специализированные программы могут по-прежнему конфликтовать с длинными путями. Тот же редактор Microsoft Word и другие программы пакета Office не поддерживают длинные пути. Более того, проводник Windows (File Explorer) также до сих пор (!!!) не поддерживает работу с объектами путь к которым превышает значение MAX_PATH Win32 API.

Для обхода ограничения Win32 API многие приложения сразу разрабатываются для использования абсолютный путь к файлу, на который не действует ограничение MAX_PATH. В этом UNC формате путь к файлу будет выглядеть так: \\?\C:\SomeLongPath\LongNameFile.txt

Если ваше приложение не поддерживает режим longPathAware, можно использовать формат пути с префиксом \\?\ для доступа к файлам. Это позволит обойти ограничение MAX_PATH.

обходное решение для доступа к файлам с длинным именами

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

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


Предыдущая статья Следующая статья


Комментариев: 31 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)