Хоча NTFS дозволяє пропускати шлях приблизно 32 000 символів, ви знайшли обмеження довжиною шляху 2532 символів API Win32 .
В Windows API (за деякими винятками, що обговорюються у [зв'язаному документі]), максимальна довжина шляху є MAX_PATH
, яка визначається як 260 символів.
(До NULL
шляху також додається символ закінчення, який дає нам 259 символів, що використовуються.)
З Провідника (і майже всі інші додатки Windows) покладаються на API Win32 для доступу до файлової системи, це не практично , щоб обійти це обмеження , навіть якщо це можливо :
API Windows має багато функцій, які також мають версії Unicode, щоб дозволити шлях збільшеної довжини для максимальної загальної довжини шляху 32767 символів. Цей тип шляху складається з компонентів, розділених косою рисою, кожен до значення, що повертається в lpMaximumComponentLength
параметрі GetVolumeInformation
функції (це значення зазвичай 255 символів). Щоб вказати шлях збільшеної довжини, використовуйте префікс "\\? \". Наприклад, "\\? \ D: \ дуже довгий шлях ".
На жаль, ви не можете просто ввести \\?\D:\very long path
у вікно провідника. Додаток має бути розроблено для використання цих API та обробки дуже довгих імен.
Один із способів доступу до шляхів збільшеної довжини під Windows - це встановлення Cygwin , шару емуляції * nix для Windows. У моєму тестуванні, схоже, Cygwin не обмежений MAX_PATH
; bash та vi не мали проблем із шляхами довжиною 2000 символів.
Майте на увазі, що хоч ви можете використовувати bash для перегляду шляхів збільшеної довжини, ви, ймовірно, не зможете відкривати файли в цих контурах у звичайних програмах Windows. Наприклад, ви вводите текст, notepad
коли робочий каталог - це шлях із збільшеною довжиною
Помилка: у поточного робочого каталогу є шлях, довший дозволеного для робочого каталогу Win32. Неможливо запустити навідну програму Windows звідси.
І спроба теж notepad "\\?\D:\very long path\file.txt"
не працює; він запускається, але просто говорить: "Неможливо знайти файл ..." Якщо спробувати те саме з Notepad ++, його збій. (Можливо, переповнення буфера.)
Вашим іншим варіантом доступу до певних файлів, похованих глибоко в межах великої довжини, є скорочення самого шляху шляхом створення точки з'єднання NTFS . З підвищеного командного рядка:
D:\> mklink /J jct "\\?\D:\very\long\path"
Тепер ви можете отримати доступ до вмісту D:\very\long\path\
від D:\jct\
. Ви не матимете жодних проблем із довжиною шляху, тому що, що стосується Провідника та інших додатків, шлях є справедливим D:\jct\
(або будь-яким іншим). Драйвер NTFS прозоро обробляє перенаправлення шляху ("точка перезавантаження").
Мінусом цього підходу є очевидно, що вам потрібно створити з'єднання біля файлу, до якого ви хочете отримати доступ; ви все одно не можете просто переглядати всю структуру каталогів.
Що стосується спеціальних символів ( " * : < > ? \ |
), то це просто нікуди. Ці символи мають особливі значення в Windows, тому використовувати їх в межах шляхів неможливо. (Cygwin дозволяє створювати файли зі спеціальними символами, але це робиться, замінюючи символи спеціальними символами Unicode, які потім замінює під час читання. Перегляд цих створених Cygwin файлів під Linux або в Explorer не виглядає правильним, оскільки символи Unicode не будуть замінені назад.)
Все це говорило: що ти робиш, що вимагає дуже довгих шляхів? Можливо, ви могли б полегшити своє життя, переоцінивши те, що ви робите, і уникаючи довгих шляхів. Швидше за все, вам так чи інакше не потрібні стежки .