Длина имени файла и абсолютного пути
Вопрос, на первый взгляд простой, но с регулярной периодичностью возникают ситуации, когда неверное понимание этого вопроса приводит к разного рода недоразумениям. Особенно в мультиплатформенных средах.
☝️ Начнем с Windows. Классическая длина имени – 255 символов, максимальная длина пути – 260 символов.
Обратите внимание – символов, максимальная длина имени директории – 244 символа, так как система резервирует часть пути для файла в формате 8.3.
Однако начиная с Windows 10 1607 и Server 2016 эти ограничения можно отключить, в этом случае лимит имени файла или абсолютного пути будет определяться файловой системой, для NTFS это 32767 символов, для ReFS - 32000 символов.
👉 Теперь Linux. Имена файлов в Linux могут быть длиной до 255 байт. Полная длина пути не должна превышать 4096 байт. В отличие от Windows в ограничениях используются не символы, а байты. А кодировка UTF-8 для символов национальных алфавитов предусматривает до 4 байт на 1 символ.
Таким образом длина имени у нас может неожиданным образом оказаться ограниченной 63 символами, а максимальный путь стать 1024 символа.
Кириллица занимает 2 байта на символ, поэтому в Linux вы будете ограничены 127 символами в имени файла и 2048 символами в пути.
Смешивая различные символы, вы получите различные варианты лимитов между максимальными и минимальными.
Обычно это вызывает сложности при копировании или распаковке файлов из систем с кодировками CP-1251 или KOI-8.
Еще одна особенность связана с использованием криптографических файловых систем, таких как eCryptFS , в этом случае длина пути будет ограничена 143 байта или 71 символ на кириллице.
Post #6579
2.41K

- 👍 15
- ❤ 3
- 🔥 2
- 🤔 2
- 🤯 1