stdio.h в OpenWatcom указывает 143 байта (исключая завершающий \0
). Мы можем получить это следующим образом:
- pathname = drive_letter + ":" + "\\" + dirname + name + "." + extension
- drive_letter - 1 байт, dirname должно быть пустым или заканчиваться на \ и иметь размер от 0 до 128 байтов, имя - от 1 до 8 байтов, расширение - от 0 до 3 байтов.
- Итак, ограничение на размер пути составляет: 1 + 1 + 1 + 128 + 8 + 1 + 3 = 143 байта.
Откуда берется ограничение в 128 байт для имени каталога? Это где-то задокументировано?
Я обнаружил задокументированное ограничение в 66 байт для пути к каталогу на основе Current Directory Structure (CDS). Я предполагаю, что это означает, что dirname имеет ограничение в 64 байта, таким образом, ограничение на размер пути составляет 1 + 1 + 1 + 64 + 8 + 1 + 3 = 79 байтов. Но, вероятно, это применимо только к команде cd
для каждого диска, а абсолютные пути могут быть длиннее.
Обратите внимание, что меня не интересует ограничение в 260 байт (или 260 символов), налагаемое некоторые 32-битные Windows версии. Меня интересует ограничение DOS.
Эксперимент:
- DOSBox 0.74-3, кажется, может сделать
cd C:\EXAMPLE1.DIR\EXAMPLE2.DIR\EXAMPLE3.DIR\EXAMPLE4.DIR\EXAMPLE5.DIR\EXAMPLE6.DIR
, но команда dir
не работает с Illegal Path.
. Таким образом, ограничение на размер пути составляет не более 80 байт. - FreeDOS 1.2, похоже, может выполнять
cd C:\EXAMPLE1.DIR\EXAMPLE2.DIR\EXAMPLE3.DIR\EXAMPLE4.DIR
, а dir
работает там, но добавление еще одного уровня (\EXAMPLE5.DIR
) приводит к сбою CHDIR failed
. Таким образом, максимальный размер имени пути составляет 67 байт.