Применяет ли OS X максимальную длину имени файла или ограничение символов?

Какова максимальная длина символа имени файла в OS X?

Второстепенное значение имеет то, разрешены или запрещены некоторые символы в дополнение к каким-либо ограничениям общей длины.

Предполагая файловую систему HFS+?

Ответы (2)

Из шрифта всех знаний максимальный размер имени файла в файловой системе HFS+ по умолчанию составляет 255 единиц кодировки UTF-16, то есть в основном 255 символов. Технически можно использовать любой символ Юникода, но это может быть практически ограничено используемым вами приложением — например, символ /используется для разграничения каталогов в путях, поэтому вам может быть запрещено давать имя одному файлу stuff/things.txt, поскольку это означает «файл things.txtв stuffкаталоге» операционной системе. Существуют способы «экранирования» символов, например, /в именах файлов, но для общего использования это не рекомендуется.

Что с /не верно (здесь 10.6). То, что вы не можете использовать, это :(старый разделитель HFS), по крайней мере, в Finder. Забавно то, что /представлен как :на уровне оболочки. Еще одно странное ограничение заключается в том, что длина пути ограничена 1024 байтами или символами UTF-8, не знаю какими. Это не применяется Finder и может привести к странному поведению.
@PercivalUlysses Вы правы, :это запрещено в HFS и HFS +, но большинство пользователей UNIX привыкли к автоматической замене / на : и наоборот и не понимают, что внутреннее хранилище HFS использует : для отделения каталогов от имен файлов.
@bmike Да :) Вы знаете что-нибудь об этом ограничении в 1024 символа для путей? В 10.6 это поведение задокументировано в системных заголовочных файлах, и есть PATH_MAXпеременная. Все еще так на более поздних системах?
@PercivalUlysses Да - в Mountain Lion я смог сделать путь к каталогу глубиной 1037 символов, добавить файл и выделить его, поисковик не хочет переходить, находить или открывать этот файл в текстовом редакторе, пока я не переместил его на одну папку вверх ( где длина пути 996) и все работает как положено. Также pathchk -pудобен для запуска подобных проверок переносимости.
Я проверил следующее: touch 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345работает нормально. А вот touch 12345678901234567890....6с еще одним персонажем выкидывает: File name too long. FYI touchпросто создает пустой файл или фактически устанавливает существующий файл time_modifiedв настоящее время.
@AlexGrafe Мне удалось создать 8 вложенных каталогов с этим именем пути. PATH_MAX встречается только при указании абсолютных путей к системным вызовам, когда вы указываете относительные каталоги, полная длина пути кажется неограниченной. Биг-Сур, APFS.

Да, вы должны сохранить имена файлов до 255 символов, но пути могут быть длиннее, но не так долго, как позволяют некоторые другие Unix.

Настольная OS X поддерживает десять основных файловых систем (HFS, HFS Plus, UFS, WebDAV, UDF, FAT, SMB/CIFS, AFP, NFS и FTP) с несколькими вариантами некоторых из них. Подробности см. в таблице 1 в статье на сайте developer.apple.com ниже:

Системная файловая система по умолчанию, HFS plus , поддерживает имена файлов из 255 единиц кодировки UTF-16 , и единственный зарезервированный символ — это :тот, который используется внутри для обозначения изменения каталога, в отличие от того, /который обычно зарезервирован для обозначения изменения каталога, а не для принадлежности к имени файла. файл. (хорошо - я думаю, что 0x00, нулевой символ также запрещен в HFS+)

По соглашению программное обеспечение должно использовать дескрипторы файлов и нести ответственность за выделение достаточного пространства для размещения произвольно длинного пути к файлу, если оно не использует стандартный API для навигации по структуре файловой системы для поиска имени файла длиной 255.

touch :и mkdir :работать, хотя
@StefanDragnev Вы смотрели на них, как они отображаются в Finder? Есть автоматическая замена (: разделитель путей, но на стороне Unix переключатели: и / во всех путях)
Замечательный. Finder показывает файл/папку с именем /. Xcode также показывает имя файла как /. VS Code, и lsоба показывают имя как :.