
Ограничение длины пути в Windows и как с ним работать

Ограничение длины пути в Windows и как с ним работать
В Windows существует одно из самых известных исторических ограничений - максимальная длина пути к файлу или папке составляет 260 символов. Это значение определяется константой MAX_PATH в Win32 API и включает в себя: букву диска (например, C:\) - 3 символа, полный путь по иерархии папок, имя файла, завершающий нулевой символ (NULL) - 1 символ. Таким образом, реальное пространство для имени файла или папки ограничено примерно 256 символами, что часто становится проблемой при работе с глубоко вложенными каталогами или длинными именами.
Ограничение не связано с возможностями файловой системы NTFS, которая поддерживает пути длиной до 32767 символов. Проблема обусловлена устаревшим поведением Win32 API, разработанным еще в эпоху 16-битных приложений. Ради обратной совместимости Microsoft сохранила это ограничение на протяжении десятилетий. Проводник Windows и значительная часть приложений не поддерживают пути, превышающие 260 символов.

Некорректное имя файла
Попытки работы с такими файлами или папками, их создание, копирование, перемещение или удаление, часто завершаются ошибками, такими как "Слишком длинный путь" или "Некорректное имя файла".

Параметр групповой политики
Начиная с Windows 10 версии 1607 и Windows Server 2016, в системе доступен параметр групповой политики, позволяющий включить поддержку длинных путей к файлам и папкам. По умолчанию он отключен. Чтобы активировать эту функцию, можно воспользоваться редактором локальной групповой политики (gpedit.msc), где в разделе "Конфигурация компьютера" -> "Административные шаблоны" -> "Система" -> "Файловая система" находится параметр "Включить длинные пути Win32" (Enable Win32 long paths). После его включения необходимо перезагрузить компьютер, чтобы изменения вступили в силу.
Поддержку длинных путей можно активировать и минуя групповые политики, для этого достаточно установить нужное значение параметра в реестре Windows.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /fВключаем редактор реестра Windows - для этого нажимаем Win+R, в открывшемся окне "Выполнить" вводим команду regedit и нажимаем Enter. При появлении запроса от контроля учётных записей (UAC) подтверждаем запуск с правами администратора.

Включение параметра
Этот путь можно пройти вручную, последовательно раскрывая ветки слева, либо просто скопировать его в адресную строку regedit (начиная с Windows 10, редактор реестра поддерживает прямой ввод пути). В правой панели находим параметр с именем LongPathsEnabled. Если он уже существует, дважды кликаем по нему и устанавливаем значение 1. Если параметра нет - щелкаем правой кнопкой мыши по пустому месту в правой части окна, выбираем "Создать" -> "Параметр" DWORD (32 бита) и называем его LongPathsEnabled. Затем присваиваем ему значение 1.

Меняем параметр
Для обхода ограничения Win32 API многие современные приложения изначально разрабатываются с учетом использования специального формата абсолютного пути, на который не распространяется лимит MAX_PATH. Такой путь начинается с префикса \\?\ и позволяет работать с файлами, расположение которых превышает традиционные 260 символов. Например, путь будет выглядеть так: \\?\C:\SomeVeryVeryVeryLongPath\MyLongNameFile.txt. Даже если приложение не поддерживает режим LongPathAware, использование этого формата дает возможность напрямую обращаться к файлам и выполнять операции с ними, эффективно обходя ограничение длины пути.

Файл в UNC формате
Если вам нужно выполнить массовые операции с файлами, путь к которым превышает допустимый лимит, например, удаление, перемещение или копирование, а Проводник Windows не позволяет это сделать, можно воспользоваться альтернативными инструментами. Подойдут файловые менеджеры, такие как Total Commander, а также командные утилиты, например xcopy или PowerShell. Эти средства при включенной опции LongPathsEnabled поддерживают длинные пути и позволяют эффективно управлять проблемными файлами и папками, которые недоступны через стандартный интерфейс.
Просмотров: 793 | Комментариев: 5
Метки: система
Комментарии
Отзывы посетителей сайта о статье
toor
(19.10.2025 в 23:48):
Farxial, воспользоваться любым редактором ресурсов типа restoratos, exescope и т.п. И либо отредактировать манифест в самом exe либо просто удалить его оттуда
Farxial
(09.10.2025 в 17:20):
Мне всегда было интересно, как хорошо будут работать длинные пути, если в OBJECT_ATTRIBUTES (для NtCreateFile/NtOpenFile) в RootDirectory передавать хендл папки, в ObjectName длиной до 32767 символов имя следующей папки и открывать папку, и так далее вплоть до файла. Но поймал себя на мысли, что, даже если ядро это поддерживает, стандартный Проводник всё равно вряд ли это переварит, а кодить и проверять уже было лень, и так и заглохло. А жаль, было бы весело, если бы длина пути могла быть бесконечной. :)
Спасибо Автору за статью. А Анониму спасибо за информацию про манифест. Но манифест легко можно добавить и самому отдельным файлом (Имя.exe.manifest), если его нет в ресурсах, во всяком случае это работает в Windows 7 SP1, а вот если манифест уже есть в ресурсах, то тут уже посложнее, не знаю, как это решить.
Спасибо Автору за статью. А Анониму спасибо за информацию про манифест. Но манифест легко можно добавить и самому отдельным файлом (Имя.exe.manifest), если его нет в ресурсах, во всяком случае это работает в Windows 7 SP1, а вот если манифест уже есть в ресурсах, то тут уже посложнее, не знаю, как это решить.
ManHunter
(09.10.2025 в 11:15):
Не изменяя само приложение, манифесте так просто не поменять. А особенно старый софт, задача не простая.
Аноним
(06.10.2025 в 09:35):
Включить LongPathsEnabled, к сожалению, мало. В манифесте приложения должно быть явно указано, что оно longPathAware, иначе никакого профита от включения длинных путей оно не получит.
https://learn.microsoft.com/en...07-and-later
https://learn.microsoft.com/en...07-and-later
mr_yoda
(06.10.2025 в 07:59):
Спасибо! Интересная и полезная информация.
Добавить комментарий
Заполните форму для добавления комментария


