Довгі шляхи в Windows 10.
Практично кожен користувач Windows рано чи пізно стикається з помилкою "занадто довгий шлях" (path too long). Помилка ця виникає при роботі з файлами або папками, у яких повний шлях перевищує значення в 260 символів.
Нагадаю, що повний шлях включає в себе букву диска, двокрапка, зворотний слеш, імена компонентів (файл, директорія) розділені слешем і завершальний порожній символ (NUL).Виглядає повний шлях приблизно так:
C: \ directory \ subdirectory \ filename
Відповідно, якщо сума всіх компонентів шляху більше 260 символів, то шлях вважається занадто довгим. Більшість додатків Windows не вміють працювати з такими шляхами і при зверненні до файлу \ папці видадуть приблизно таке повідомлення:
Що цікаво, значення в 260 символів обумовлено значенням MAX_PATH Win32 API.У файлової системи NTFS максимальна довжина шляху "трохи" більше і становить 32767 символів. Для обходу обмежень Win32 API деякі додатки використовують формат UNC, вказуючи абсолютний шлях з префіксом \\? \, Наприклад так:
\\? \ C: \ directory \ subdirectory \ filename
У Windows 10 (починаючи з версії 1607) з'явилася можливість відключити перевірку MAX_PATH і використовувати довгі шляхи без префікса \\? \.Зробити це можна двома способами - за допомогою групових політик або шляхом редагування реєстру. Ми розглянемо обидва способи, почнемо з політик.
Групові політики
Насамперед відкриваємо редактор локальних групових політик, для чого тиснемо клавіші Win + R і виконуємо команду gpedit.msc.
Потрібна нам політика знаходиться в розділі Конфігурація комп'ютера \ Адміністративні шаблони \ Система \ Файлова система (Computer configuration \ Administrative templates \ System \ Filesystem) і називається Включити довгі шляхи Win32 (Enable Win32 long paths).
Для активації підтримки довгих шляхів треба перевести політику в стан «Включено».
Реєстр
Для включення підтримки довгих шляхів через реєстр необхідно знайти в розділі HKLM \ System \ CurrentControlSet \ Control \ FileSystem параметр з ім'ям LongPathEnabled і задати його значення рівним 1.
Цю операцію можна зробити за допомогою PowerShell, командою:
Set-ItemProperty -Path HKLM: \ SYSTEM \ CurrentControlSet \ Control \ FileSystem -Name LongPathsEnabled -Value 1
В обох випадках потрібно перезавантажити комп'ютер.Після перезавантаження зміни вступлять в силу і для шляхів буде діяти тільки обмеження файлової системи NTFS (32767 символу), перевищити яке вам навряд чи вдасться. Однак це зовсім не означає, що можна розслабитися. У деяких додатках перевірка MAX_PATH закладена в коді, тому по можливості краще не перевищувати це обмеження.
Доповнення
Для того, щоб користуватися довгими шляхами, в додатку повинна бути включена їх підтримка. Якщо ви пишете власний додаток, то для підтримки довгих шляхів в маніфесті додатка треба вказати наступні настройки:
true
А тепер про сумне.Як раптово виявилося, в провіднику Windows підтримка довгих шляхів не реалізована !!! Один з розробників Microsoft з цього приводу сказав приблизно наступне:
"Ця функція не готова для включення в Windows Explorer. Вам потрібно почекати, поки Microsoft не включить її в Explorer, або використовувати сторонній інструмент управління файлами, який сумісний з довгими шляхами."
Це було сказано ще в 2016 році. Але, судячи з усього, розробники на дану проблему просто забили. На даний момент в версії 1 903 провідник все так само не підтримує довгі шляхи файлів. Ось так