Проблема с MAX_PATH все еще существует в Windows 10

Может ли кто-нибудь сообщить нам / мне, если MAX_PATH проблема все еще существует в (техническая предварительная версия) Windows 10. И если она существует: сколько символов может иметь путь и имя отдельного файла?


person dkeck    schedule 28.12.2014    source источник
comment
Пожалуйста, оставьте комментарий, когда вы проголосуете против. Например. какой-то URL-адрес, по которому можно легко найти ответ. Или что не так с самим вопросом.   -  person dkeck    schedule 29.12.2014
comment
попробуйте сборку 14352 и установите запись GP   -  person magicandre1981    schedule 28.05.2016
comment
Либо используйте параметр групповой политики, либо измените реестр вручную. См. news.slashdot.org/story/16/05/31/0012222/   -  person holmb    schedule 31.05.2016
comment
Я недавно заметил это, когда я установил Python, так как у них есть возможность после установки отключить ограничение MAX_PATH. Почему у кого-то в конечном итоге имя пути длиннее 260 символов?   -  person Ungeheuer    schedule 26.07.2017
comment
@Ungeheuer это может произойти, когда вы сериализуете данные из приложения в файловую систему, чтобы поделиться ими с другими разработчиками. Многие сериализаторы контента будут следовать структуре путей при создании этих папок и файлов, особенно в отношении дерева страниц и элементов данных CMS.   -  person Ben Sewards    schedule 23.07.2021


Ответы (3)


Проблема всегда будет присутствовать в Windows, чтобы сохранить совместимость со старым программным обеспечением. Используйте стиль NT синтаксис имени "\\?\D:\very long path", чтобы обойти эту проблему.

В Windows 10 (версия 1607 - юбилейное обновление) и Windows Server 2016 у вас есть возможность игнорировать проблему MAX_PATH с помощью переопределение записи групповой политики enable NTFS long paths в Computer Configuration -> Admin Templates -> System -> FileSystem:

введите описание изображения здесь

введите описание изображения здесь

Приложения должны иметь запись longPathAware, аналогичную DPIAware, в манифесте приложения.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
      <longPathAware>true</longPathAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
person magicandre1981    schedule 29.12.2014
comment
Почему Linux или Mac не столкнулись с этими проблемами совместимости? Почему нельзя расширить API файлов Win32, отличных от Unicode (с некоторыми условиями в существующих функциях обработки ввода-вывода), чтобы можно было использовать, например, MAX_PATH2 = 4096 (или умное динамическое размещение). Тогда старое программное обеспечение будет использовать только унаследованную часть реализации. Но новое программное обеспечение, особенно продукты Microsoft (включая cmd, explorer, powershell, VS), должны использовать новые функции. ОС должна затенять всю эту техническую историю: просто используйте dev: \ path \ file.ext, и ОС решит, что лучше всего. - person dkeck; 30.12.2014
comment
спросите это у Microsoft. Мы не можем рассказать вам, почему и как они приняли решение по этой проблеме. - person magicandre1981; 30.12.2014
comment
Они жестко спорили о том, чтобы исправить это для win10 и просто наконец нарушить совместимость. Я не уверен, где они пришли к этому вопросу, но они действительно думают об этом. - person justin.m.chase; 03.07.2015
comment
@ justin.m.chase они могут добавить новую запись в файл манифеста, которую разработчики могут установить, если их приложение работает нормально с более длинными путями. Старое программное обеспечение или инструменты без записи все равно будут использовать старую длину. - person magicandre1981; 03.07.2015
comment
возможно, это не относящийся к делу комментарий, но я считаю, что подобные вещи будут и дальше отталкивать разработчиков от Windows; инструменты командной строки лучше в Linux, а в Linux нет этих ограничений, которые нарушены - не исправят - person jcollum; 10.08.2015
comment
Microsoft должна просто дать нам возможность отключить его в реестре, чтобы NT максимально поддерживала 32000 чего-то ... И давайте беспокоиться о том, какое программное обеспечение мы используем, и сломается оно или нет ... Использование node.js в Windows - это чертовски неприятно ... До такой степени, что я делаю linux vm только для работы с узлами ... Тем не менее, Microsoft считает окна этой потрясающей средой разработки ... Иногда я даже не могу структурировать свой .Net-код так, как я хочу потому что пространства имен становятся длинными, и мне приходится переименовывать папки иначе, чем там пространство имен ... - person Ryan Mann; 21.11.2015
comment
@Ryios нет, общие параметры реестра плохие. Думаю, лучше всего подойдет настройка в манифесте приложения. - person magicandre1981; 22.12.2015
comment
Да, мне все равно, как они это делают, но почему они все еще заставляют нас уважать MAX_PATH в 2015 году .... - person Ryan Mann; 22.12.2015
comment
@ justin.m.chase похоже, что MS последовала моему совету и добавила решение на основе настроек манифеста приложения в Win10 версии 1607 - юбилейное обновление. - person magicandre1981; 28.05.2016
comment
@Ryios попробуй последнюю инсайдерскую сборку, похоже, чтобы исправить ограничение - person magicandre1981; 28.05.2016
comment
Обратите внимание, что приложениям UWP также будут разрешены длинные пути, если у них установлена ​​максимальная протестированная версия ›= Windows Anniversary. Им не нужна запись в манифесте Fusion. Но GP по-прежнему необходимо перевернуть, прежде чем какое-либо приложение сможет использовать длинные пути. - person Peter Torr - MSFT; 02.06.2016
comment
Вероятно, им следовало поступить так же, как в Vista. Всегда включайте его, заставляет множество программ вылетать из-за переполнения буфера стека без какой-либо диагностики и заставляет всех восклицать, что годовщины - отстой !. Но программисты исправят свои ошибки, и следующий выпуск будет отличным. Это неполный ответ без упоминания последствий / GS. - person Hans Passant; 13.08.2016
comment
260 символов должно хватить любому;) - person paulm; 01.09.2016
comment
Наконец, использование One Commander помогло мне скопировать файлы. Подробности на superuser.com/a/1135038/139067 - person gsinha; 15.10.2016
comment
Даже с Anniversary Update и включенными длинными путями к файлам Windows 10 по-прежнему не может распаковать тяжелый zip-файл, не жалуясь на это. В 21 веке это уже не смешно. - person Andrew S; 27.10.2016
comment
@AndrewS Проводник еще не знает longpath. они все еще работают над этим - person magicandre1981; 27.10.2016
comment
@AndrewS нет, с 1607 они добавили основы для уничтожения максимального пути и, возможно, с версией 1703 они сделали Explorer совместимым - person magicandre1981; 28.10.2016
comment
Определенно может быть, зная MS. - person Andrew S; 28.10.2016
comment
по причине. Вероятно, это просто программа, которая выделяет фиксированный буфер для получения путей из Windows, а в эпоху DOS 8.3 260 символов были действительно длинными. - person phuclv; 12.04.2017
comment
Наступил 2021 год, и мне все еще нужно вернуться к этому вопросу. Это неприемлемо. - person Danny; 23.01.2021

Вот какой-то доступный код для включения длинных путей, чтобы не нажимать на @ magicandre1981 ответ. Это было протестировано на Windows Server 2016, оно должно работать и на Windows 10.

- name: Remove filesystem path length limitations
  win_regedit:
    path: HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem
    name: LongPathsEnabled
    type: dword
    data: 1
    state: present
person liberforce    schedule 24.08.2018

Да, он все еще существует. Просто столкнулся с проблемой, и обычный метод сопоставления сетевого диска с ним для сокращения пути, похоже, не позволял мне открывать файлы, но он позволял мне переименовывать и перемещать их.

person Gareth Oates    schedule 16.02.2016
comment
subst твой друг - person evandrix; 17.03.2020