Обмеження імені шляху в вікні 256 символів


17

після довгого дослідження я нарешті з'ясував, що імена шляхів не можуть бути довші 256 символів навіть в останніх Microsoft Windows 7. Я дійсно не розумію, чому існує таке дурне обмеження, оскільки NTFS може обробляти до ~ 32 000 символів довжина без жодних проблем вже більше десятка років! Чи немає можливості змінити це? Або є якісь практичні рішення, щоб цього уникнути?

260 символів - дуже мало для навіть простих випадків використання, як-от вкладені каталоги фотографій з довгими іменами файлів.


1
Я думаю, що турбота полягає в тому, що існують старіші програми, які мають жорстке уявлення про те, як довгий має бути шлях, так що якщо ви спробуєте використовувати їх на більш довгих шляхах, вони вибухнуть цікавими способами.
— dsolimano

Чи є у ОС Linux ця проблема?
— ahorn

Відповіді:


18

За даними Microsoft:

  • Традиційний API Windows обмежує імена шляхів до 260 символів, навіть для програм, розроблених для останньої версії.

  • Програми, що використовують API, орієнтований на Unicode, можуть використовувати форму шляху, яка містить до 32767 символів. Ім'я файлу має бути встановлено з префіксом \\?\і повинно бути абсолютним шляхом, наприклад, \\?\c:\dir\fileабо \\?\UNC\server\share\file. Є додаткові обмеження, див. Посилання на деталі.

Якщо вам вдалося створити та використовувати глибоку ієрархію файлів і вам потрібно працювати з додатком, який вибухає через довжину імені файлу, ви можете спробувати кілька речей:

  • Використовуйте mklinkкоманду для створення символічних посилань та пропустіть шлях, який використовує їх, до вашої програми.

  • Використовуйте substкоманду, щоб призначити букву диска директорії.

  • Запустіть свою програму з глибокого каталогу та пройдіть її короткими відносними шляхами.

  • Замініть кілька довгих імен на 8.3 псевдоніми ( micros~1), припускаючи, що вони все ще існують у Windows 7. Якщо у вас є micros~1поряд micros~2, я не знаю, як сказати, що є; можливо, запустіть DOS command.com(знову ж таки, припускаючи, що Windows 7 все ще може це зробити).


3
Ну, навіть Windows Explorer з Win7, здається, використовує традиційний API! Це шкода.

3
Ще більше зворотних нахилів `\\? \` :-)
— Дзвінок Ø

@Gilles, Чи мікрос ~ 1 і мікрос ~ 2 стандартизовані у всіх системах чи це випадково?
— Pacerier

@Pacerier Те, що було створено першим, потрапляє в каталог micros~1, тому воно по суті є випадковим.
— Жил "ТАК - перестань бути злим"

0

Ви можете використовувати короткі (8.3) імена для всіх своїх папок і файлів.

Вам потрібно переконатися, що вони включені.

Довгим ім'ям файлу вважається будь-яке ім'я файлу, яке перевищує короткий режим іменування стилів MS-DOS (його також називають 8.3). Як правило, Windows зберігає на диску довгі імена файлів у вигляді спеціальних записів каталогів, які можуть бути відключені загальносистемними з міркувань продуктивності залежно від конкретної файлової системи. Коли ви створюєте довге ім'я файлу, Windows також може створити коротку форму 8.3 імені, що називається псевдонімом 8.3, і також зберегти його на диску. Цей псевдонім 8.3 можна вимкнути для визначеного обсягу.

(мій сміливий)

Вам також доведеться написати якийсь код, щоб отримати коротке ім’я від довгого імені.

Джерело


2
хаха ... Я добре пам'ятаю ці дні в Windows 95, коли всі ми отримали цей супер-пупер FAT32 з 256 символами довгих імен! Це було фантастично (в ці дні), і я дуже шокований тим, що обмеження в назві файлу можуть бути проблемою в ці дні. 2010 рік! Windows справді архаїчна ...

0

Ім'я файлу / каталогу в NTFS обмежено 255 кодовими точками unicode, оскільки довжина зберігається як байт. Але немає загальної межі загальної довжини шляху.

Багато дзвінків API Win32 (включаючи оболонку Explorer) мають обмеження довжини 260-1. Деякі інші виклики мають можливість використовувати префікс \\? \, Щоб отримати до 32 К (трохи менше, оскільки ім'я гучності замінюється в Kernel-land)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.