максимальная длина пути в windows
Максимальная длина пути в windows
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов Pyatilistnik.org. В прошлый раз мы с вами разобрали возможности утилиты PING, рассмотрели как ее применять на практике. В сегодняшней публикации я вам покажу, как устраняется боль и печаль в операционных системах Windows, я говорю про длинные пути, в своей практике я очень часто встречал жалобы «Слишком длинный целевой путь» или «Слишком длинный конечный путь«, то же самое вы можете встретить и при удалении. Ниже я покажу, как выкручиваться из данной ситуации.
Описание проблемы длинных путей
Тем не менее, файловая система Windows по-прежнему накладывает некоторые ограничения, например, какие символы могут использоваться в именах файлов и общую длину путей. Некоторое время максимальная длина пути составляла 260 символов, но с появлением Windows 10, часть ограничений начала потихоньку уходить, например для приложений и появилась возможность отключить проверку MAX_PATH и использовать длинные пути без префикса \\?\.
Что интересно, значение в 260 символов обусловлено значением MAX_PATH Win32 API. У файловой системы NTFS максимальная длина пути ″немного″ больше и составляет 32767 символа. Для обхода ограничений Win32 API некоторые приложения используют формат UNC, указывая абсолютный путь с префиксом \\?\, например так:
Большинство людей может и не столкнуться с ней, а вот почти каждый системный администратор обязательно это увидит. Тут все дело в том, что в большинстве организаций есть свои сетевые файловые ресурсы, через которые пользователи производят обмен и работу с документами. В какой-то момент люди могут создать такой путь, который будет 258 или 260 символов, попытаются туда скопировать файл, а им выдастся ошибка:
Тоже самое при копировании в папку, так же выскакивает «Слишком длинный целевой путь».
Вот ошибка при извлечении архива в сетевую папку:
Методы снимающие ограничения на длину пути в Windows
Нюансы длинных путей в приложениях
Есть один нюанс. Этот новый параметр (имеется ввиду та политика и ключ реестра) не обязательно будет работать со всеми существующими приложениями, но он будет работать с большинством. В частности, любые современные приложения должны работать нормально, как и все 64-битные приложения. Старые 32-разрядные приложения должны быть применимы для работы, что на самом деле просто означает, что разработчик указал в файле манифеста приложения, что приложение поддерживает более длинные пути. Большинство популярных 32-битных приложений не должно вызывать проблем. Тем не менее, вы ничем не рискуете, пробуя настройку. Если приложение не работает, единственное, что произойдет, это то, что оно не сможет открывать или сохранять файлы, сохраненные в местах, где полный путь превышает 260 символов.
Если вы разработчик, то чтобы ваше приложение имело возможность работать с длинными путями Windows, в манифесте обязательно указывайте следующие настройки:
Как в Windows 10 отключить ограничение на длину пути в 260 символов через политику
Чем примечателен данный метод, так это тем, что неподготовленных пользователей он не вынуждает выполнять команды или производить правку реестра, тут все в графическом виде. Так же если у вас есть домен Active Directory и вы хотите массово убрать ошибки «Слишком длинный целевой путь» или «Слишком длинный конечный путь» в приложениях и запретить им проверять MAX_PATH и использовать длинные пути без префикса \\?\, то групповые политики вам это помогут.
Покажу для начала, как делать через локальную политику, открываете окно «Выполнить» в котором пишите gpedit.msc.
Далее идем по пути:
Найдите тут параметр «Включить длинные пути Win32 (Enable Win32 long paths)«, по умолчанию он отключен, и я честно не понимаю почему. Активируйте его.
Как я писал выше, в проводнике это не даст ни каких эффектов, поэтому вы все так же будите получать ошибку при копировании, создании, удалении «Слишком длинный целевой путь» или «Слишком длинный конечный путь«. Ниже я покажу, что делать если нужно что-то там удалить или изменить. Данное ограничение в длине пути теперь не подхватиться на лету всеми приложениями, потребуется перезагрузка.
Включение поддержки длинных путей через реестр
Данный метод ни чуть не сложнее предыдущего и делает все то же самое, включает поддержку длинных путей свыше 256 символов для приложений Windows. Когда вы что-то меняете через редактор политик, по сути меняются настройки в реестре, это нужно помнить и знать. Сейчас я вам покажу какой ключ меняется. Откройте редактор реестра Windows. Перейдите в раздел:
тут вам необходимо найти параметр LongPathEnabled, которому для активации поддержки длинных путей и изменения ограничений в MAX_PATH, нужно задать значение «1». Тут потребуется перезагрузка.
Все что вам нужно, это распаковать zip-архив и запустить нужный файл активации, потом так же перезагрузиться, так как у вас будет создан нужный ключ реестра, без необходимости лезть в реестр самостоятельно.
Еще вы можете сделать такую поддержку и для конкретного пользователя по пути:
Если там нет ключа LongPathsEnabled, то создайте его, тип DWORD (32 бита) и значение 1.
Как в Windows 10 отключить ограничение на длину пути в 260 символов через PowerShell
Не все люди готовы копаться в редакторах и реестрах, им нужно быстрое решение, одним из таких является PowerShell. В оболочке выполните команду для активации параметра «Включить длинные пути Win32 (LongPathEnabled)». Не забываем перезагрузить систему.
Как удалять, копировать, переносить файлы и папки при ошибке с длинными путями
Разобравшись с тем, как отключить проверку MAX_PATH в приложениях, давайте теперь поймем и научимся решать проблему длинных путей на файловых шарах и просто в проводнике. Классическая ситуация, когда пользователь попытался перенести свой файл или удалить его, создать папку и так далее, и он получает ошибку с пресловутыми длинными путями. Он просит разобраться вас и тут начинаются танцы с бубнами, вы просите его либо переименовать часть пути, или попросить его произвести действия в другом расположении, или просто забить, сказав, что виновата Windows со своими ограничениями, но мы же с вами профессионалы и инженеры, поэтому должны уметь выходить из таких ситуаций.
Как в Windows 10 отключить ограничение на длину пути в 260 символов через командную строку
Запустите командную строку в режиме администратора и введите:
Обход ограничений длинных путей через 7zFM
Наверняка многие знают архиватор 7Zip, но мало кто пользуется его файловым менеджером 7zFM.exe, а зря именно он может вам помочь в ситуации с сообщением «Слишком длинный целевой путь» или «Слишком длинный конечный путь». Вот у меня есть тестовая директория, у которой уже есть 260 символов в пути, и я не могу там создавать новую папку.
Откройте 7zFM.exe и перейдите в нем в конечную папку вашего пути.
Для создания новой папки нажмите клавишу F7.
Задайте необходимое вам имя, в моем примере это будет «БОльше 260 Microsot«.
В результате у нас создалась новая папка и заметьте 7zFM не ругнулся на наличие длинных путей, он их игнорирует просто и все.
Проверяем, что директория доступна через проводник Windows.
Все прекрасно отображается. Теперь я думаю вы легко сможете переносить, копировать, удалять файлы через 7zFM, когда вам проводник Windows ругается на наличие длинных путей.
Как обойти ограничение длинных путей через символьную ссылку
Такой трюк мы с вами уже проделывали, когда нужно было переносить IMAP профиль у Outlook. Смысл в том, что создается файл в нужном вам месте, и этот файл это просто ярлык ссылающийся на нужный вам файл или папку, после этого путь сокращается и вы можете удалять или создавать все что вам нужно. Откройте командную строку, далее вам нужно иметь два составляющих:
Нам поможет команда mklink, где ключ /D создает ссылку на каталог
Выбираем длинный путь (или прощай MAX_PATH)
Многим пользователям ПК под управлением ОС Windows, не говоря о разработчиках, знакомы проблемы при работе с длинными (более 260 символов, MAX_PATH) путями файлов или каталогов.
Приложения Win API
В приложениях, которые используют Win API для работы с файлами, рецепт избавления от ограничения MAX_PATH был известен с незапамятных времён – необходимо было использовать Unicode версию функции с окончанием «W» для работы с директорией или файлом и начинать путь с префикса \\?\. Это давало возможность использовать пути длинной до 32767 символов.
В Windows 10 (1607) поведение функций для работы с файлами изменилось: появилась возможность отключить проверку ограничений MAX_PATH на уровне системы.
Это избавляет от необходимости использовать префикса \\?\ и потенциально даёт шанс приложениям, работающим напрямую или косвенно через Win API, получить поддержку длинных путей без необходимости их пересборки. Как активировать эту возможность описано в конце статьи.
.Net Framework
.Net Core
Тут поддержку длинных путей анонсировали ещё в ноябре 2015 года. Видимо сказалось Open Source природа проекта и отсутствие строгой необходимости обеспечения обратной совместимости.
Вот тут можно посмотреть пример.
Как включить поддержку длинных путей в Windows 10 (1607)
Эта возможность по умолчанию отключена. Это объясняется тем, что данная функция является экспериментальной, и имеется необходимость дорабатывать различные подсистемы и приложения для полной поддержки.
Включить встроенную поддержку длинных путей можно создав или изменив следующий параметр системного реестра: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem Параметр LongPathsEnabled (Тип: REG_DWORD) 1 – соответствует значению включено.
Или через групповые политики (Win+R\gpedit.msc) Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths.Оно же в локализованном варианте: Конфигурация компьютера > Административные шаблоны > Система > Файловая система > Включить длинные пути Win32.
Далее источники расходятся во мнении относительно манифеста (или я неправильно понял, но на данный момент проверить не имею возможности). Например, в документации MSDN написано, что манифест можно использовать в качестве альтернативного способа активации поддержки длинных путей в отдельных приложениях, а в блоге MSDN указано, что это является вторым обязательным шагом после активации в политиках.
Но они сходятся в формате задания данной опции:
С CMD, к сожалению, это не сработает, на данный момент, из-за особенностей работы с путями, а в PowerShell должно всё заработать.
На этом мой небольшой пятничный пост заканчивается, оставив за рамками вопросы полноты реализации поддержки длинных путей в Windows 10 (1607), или работоспособность при использовании различных комбинаций редакций Windows, файловых систем и API. По мере поступления новых фактов и результатов экспериментов пост будет обновляться.
Ограничение максимальной длины пути
в Windows API (с некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути — это максимальный _ путь, который определен как 260 символов. Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, имена компонентов, разделенные обратной косой чертой, и завершающий нуль-символ. Например, максимальный путь на диске D — это «D: \ часть 256-символьного пути «, где » » представляет невидимый завершающий нуль-символ для текущей системной кодовой страницы. (Символы используются для наглядности и не могут быть частью допустимой строки пути.)
Например, это ограничение может быть достигнуто при клонировании репозитория Git с длинными именами файлов в папку с длинным именем.
функции файлового ввода-вывода в Windows API преобразуют «/» в » \ » в процессе преобразования имени в имя в формате NT, за исключением случаев использования \ \ префикса «? \ «, как описано в следующих разделах.
нет необходимости выполнять нормализацию юникода в строках пути и имени файла для использования в Windows функциях API-интерфейса файлового ввода/вывода, так как файловая система обрабатывает путь и имена файлов как непрозрачную последовательность WCHAR. любые нормализации, необходимые приложению, должны выполняться с учетом того, что внешние вызовы связанных функций API-интерфейса Windows файлового ввода/вывода.
При использовании API для создания каталога указанный путь не может быть настолько длинным, что нельзя добавить имя файла 8,3 (т. е. имя каталога не может превышать максимальный _ путь минус 12).
Оболочка и файловая система имеют разные требования. можно создать путь с Windows API, который пользовательский интерфейс оболочки не может интерпретировать правильно.
включение длинных путей в Windows 10, версии 1607 и более поздних
Windows 10 начиная с версии 1607, ограничения по максимальному _ пути были удалены из общих функций файлов и каталогов Win32. Однако необходимо явно принять участие в новом поведении.
Чтобы обеспечить новое поведение при полном пути, должны выполняться оба следующих условия.
Манифест приложения также должен содержать longPathAware элемент.
Microsoft убрала лимит на 260 символов в пути к файлам NTFS-систем
Максимальная длина пути к файлу или папке в NTFS-системе ограничен 260 символами, но с недавним обновлением Windows 10 Insider Preivew, Microsoft дает пользователям возможность увеличить данное ограничение. Для применения данных изменений пользователь должен проделать некоторые исправления в групповой политике Windows. Для этого надо нажать Win + R, ввести gpedit.msc, а затем перейти по пути «Конфигурация компьютера – Административные шаблоны – Система – Файловая система– NTFS». После этого нажмите “Включение длинных путей NTFS”. После этого вы сможете использовать в пути к файлу больше 260 символов.
Автор поста
Рекомендуем посмотреть
Комментарии (38)
я вот, например, не знал
Это баг на двухсимочных девайсах.Жди новую сборку
Почему у меня работает, после последней сборки только раз не срабатывало переключения передача данных-wifi и обратно. Вынул симку воткнул и опять пашет.
У всех по разному ведёт себя сборка.
Та вот повезло что-ли. Сижу щёлкаю туда-сюда, чтоб не быть голословным. Нормалёк, не сглазить.
Так у тебя одна сим карта установленна?
Подтверждаю. Есть такой баг, и исправить никакими способами нельзя.
Во вторник должна новая сборка выйти на редстоун чего там будет нового?
Что все спите что-ли.
Не спим мы, просто умираем.
Норм. Удобно, может быть.
Круто. У то нас на работе один чувак любит создавать тысячу папок в папках с именами поэмы и сохранить на рабочем столе
хах, бывают же такие люди))
Ага? Он один раз звонит, говорит что сохранил папку на рабочем столе, а ее нет. Прихожу. действительно нет, потому что координаты рабочего стола уже не вмещают больше ничего)))))
Опять же, кто этими прогами гонять будет? Она? Тогда читайте мой соседний коммент, который адресован товарищу ilyadiv)
Можно расположение рабочего стола на диске д сделать
Можно и ярлык на папку создать на рабочем столе, чтоб сама папка располагалась на диске отличном от С, можно вообще все перелопатить до неузнаваемости, вот только кто это будет делать? Сестра, у которой в глазах отчетливо видно заднюю стенку черепа? Не осилит. Я? Да нафиг оно мне уперлось, задолбал уже этот неблагодарный труд)
Она НЕ О СИ ЛИТ) Понимаешь?) Я просто забил на это болт)
Это точно труд более чем неблагодарный! Идешь в компанию побухать и тут обязательно кто нибудь вспомнит про свой тормозящий ноут или смарт на ведре
Про крузока на лысой резине это в точку. Да и в принципе все в точку. Плюсую?
Я таких чудиков полно лицезрею) я вот не вы*бываясь купил себе хюндай скромный, и на бензин хватает и на прочее, и не перед кем не понтуюсь, нафиг оно нужно)
ReFS проект закрыли?
Теперь можно назвать файл +100500 символов
Точно, любители папок обрадуются?
На работе до внедрения эдо такая проблема была
Это из-за этой фигни я не могу удалить windows файлы после переустановки с бесконечным числом крякозябр?
Мы прокачали тебе файловую систему. Теперь записывать текст можно не в файле, а в названии файла
Как включить NTFS Long Paths в Windows 10
В юбилейном обновлении Windows 10 Microsoft наконец-то решила давнюю проблему, с которой разработчики столкнулись при разработке — ограничение в 260 символов для длины пути. Это ограничение длины пути присутствовало в Windows почти вечность. Если вы не знаете, во всех выпущенных на данный момент версиях Windows максимальная длина пути к файлу составляет 260 символов. Начиная со сборки 14352 Windows 10, которая является частью Anniversary Update (версия 1607), это ограничение можно обойти.
В конце на уровне пользователя, некоторые пользователи могли уже сталкиваться с проблемой в прошлом, когда проводник не разрешает доступ к файлу или папке, если путь к ним превышает 260 символов. В такой ситуации у пользователя нет другого решения, кроме как использовать символические ссылки для доступа к этим данным или сторонний инструмент, который использует обходные пути. Например, альтернативный инструмент управления файлами, Total Commander, может помочь вам получить доступ к таким файлам и папкам, поскольку он может работать с длинными путями из коробки.
Однако в оболочке Explorer все еще есть это ограничение было в Windows в течение многих лет. Чтобы решить эту проблему, Microsoft внесла соответствующие изменения в Windows 10. Новый параметр групповой политики, доступный начиная с Windows 10, сборка 14352, позволит операционной системе иметь пути длиной более 260 символов:
Включение длинных путей NTFS позволит проявленным приложениям Win32 и приложениям Магазина Windows получать доступ к путям, превышающим обычное ограничение в 260 символов на узел. Включение этого параметра приведет к тому, что в процессе будут доступны длинные пути.
На самом деле это означает, что приложение должно иметь следующую строку в своем манифесте:
Манифест — это небольшой файл, содержащий дополнительную информацию о процессе EXE, такую как информацию о совместимости, сведения о DPI и т. д.
Помимо добавления манифеста разработчиком приложения, должен быть включен соответствующий параметр групповой политики. Это можно сделать с помощью редактора групповой политики или настройки реестра.
Как включить длинные пути NTFS в Windows 10 с помощью групповой политики
Нажмите Enter.
Как включить NTFS Long Paths в Windows 10 с помощью настройки групповой политики
Совет: вы можете получить доступ к желаемому ключу реестра одним щелчком мыши.
Если вы этого не сделаете. Если у вас нет такого ключа, просто создайте его.
Наконец, есть способ включить эту новую функцию без использования групповой политики. Для этого требуется следующая настройка.
Как включить NTFS Long Paths в Windows 10 с помощью настройки реестра
Совет: вы можете получить доступ к желаемый ключ реестра одним щелчком мыши.
Если у вас нет такого ключа, просто создайте его.
См. Следующее видео. :