Один из наших клиентов обычно использует очень длинные имена путей (несколько вложенных папок с длинными именами), и мы регулярно сталкиваемся с «проблемами обучения пользователей», чтобы сократить путь до менее 260 символов.
Есть ли доступное техническое решение, можем ли мы щелкнуть каким-нибудь переключателем в Windows 7 и Windows 2008 R2, чтобы сказать: «Да, просто игнорируйте эти исторические проблемы и заставьте имя пути +260 символов работать».
P.S. Я прочитал и меня полностью не просветили Именование файлов, путей и пространств имен
Я просто упомянул трюк, о котором я здесь еще не упоминал.
Возьмем, к примеру, этот файл:
C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
Этот полный путь к файлу составляет 290 символов. Оболочка (проводник Windows) и большинство утилит командной строки, вероятно, не позволят вам прикоснуться к ней.
Использовать subst
команда так:
subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
Теперь вы можете получить доступ к файлу (а также удалить, переместить и т. Д.) Следующим образом:
X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
И теперь это имя файла составляет всего ~ 235 символов или около того, поэтому вы больше не столкнетесь с проблемой «Имя файла слишком длинное».
В Windows API есть печально известная константа, известная как MAX_PATH
. MAX_PATH - 260 символов. Файловая система NTFS фактически поддерживает пути к файлам длиной до 32 767 символов. И вы по-прежнему можете использовать имена путей длиной 32 767 символов, получая доступ к Unicode (или «широким») версиям функций Windows API, а также добавляя к пути префикс \\?\
.
MAX_PATH
был высечен в камне очень долго время назад в мире Windows. Я думаю, что это как-то связано со стандартами ANSI в то время ... но это одна из тех вещей, которые Microsoft очень сложно изменить сейчас, поскольку теперь у нас есть тысячи программ и приложений, в том числе написанных самой Microsoft, которые используют MAX_PATH
и потерпел бы неудачу по-новому, если бы константа внезапно изменилась. (Переполнение буфера, повреждение кучи и т. Д.)
Методы есть, но пока Microsoft не перекодирует виджет файлового браузера, мы в значительной степени застряли с этой старой проблемой. Это неоптимально, но так оно и работает.
Вы можете обойти это ограничение, используя нотацию \\? \ C :. Это уродливо, но поддерживает файлы длиной до 2 ^ 15.
http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath
Теперь у Microsoft есть доступное исправление для этого, начиная с Windows 10, что объясняется в Именование файлов, путей и пространств имен Статья MSDN.
darthcoder уже ответил с подробностями о \\?\C:
нотации, но теперь есть раздел реестра в HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
который можно использовать для снятия ограничений MAX_PATH для отдельной системы. В статье также упоминается поддержка управления групповой политикой на Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths
при необходимости для реализации в масштабах организации или группы.