Какое максимальное количество символов может использовать в имени файла

Обновлено: 07.07.2024

Linux имеет максимальную длину имени файла 255 символов для большинства файловых систем (включая EXT4) и максимальный путь 4096 символов. eCryptfs - это многоуровневая файловая система.

Какой длины может быть имя файла Unix?

Сравнение ограничений имени файла

Система Деликатный случай Максимальная длина (символы)
большинство файловых систем UNIX Да 255
z / OS классическая файловая система MVS (наборы данных) Нет 44
CMS файловая система Нет 8 + 8
ранний UNIX (AT&T Corporation) Да 14

Сколько символов можно включить в имя файла?

Какая была первая версия Linux?

Еще будучи студентом Хельсинкского университета, Торвальдс начал разработку Linux, чтобы создать систему, аналогичную MINIX, операционной системе UNIX. В 1991 году выпустил версия 0.02; Версия 1.0 ядра Linux, ядра операционной системы, была выпущена в 1994 году.

Как еще называется интерпретатор команд?

6) Как еще называется интерпретатор команд? Объяснение: Интерпретатор команд также называется оболочка.

Какая длина имени файла в Linux может составлять 1 балл?

ext2, ext3, ext4, zfs: без ограничений по имени пути; 255 байт ограничение имени файла. Но я легко могу создавать пути длиной более 4096 символов.

Почему в именах файлов нет пробелов?

Чрезвычайно обременительно обрабатывать правильное экранирование пространства на нескольких уровнях языков сценариев. Так если есть вероятность, что ваша программа должна быть скомпилирована системой сборки на основе Makefile, не используйте пробелы в именах файлов.

Какие специальные символы я могу использовать в имени файла?

Windows (FAT32, NTFS): любая Unicode кроме NUL,, /. *,? , ”, <,>, | . Кроме того, нет пробела в начале или в конце и без точки в конце. Mac (HFS, HFS +): любой допустимый Unicode, кроме: или / Linux (ext 2): любой байт, кроме NUL или /

Что означают недопустимые символы в пути?

Исключение «Недопустимые символы» означает, что строка пути к файлу, которую вы передаете в ReadXml, неверна: это недопустимый путь. Он может содержать "?" , или ":" в неправильном месте, или, например, "*". Вам нужно посмотреть на значение, проверить, что это такое, и выяснить, откуда взялись недопустимые символы.

В общем, нашёл, что под Windows ограничение на 255 символов, а под Linux на 255 байт, и написал такой код для копирования файлов с переименованием (там в имени сохраняются координаты прямоугольиков, и их может быть много, не лучшее решение, но это не я придумал).


Всё это падает сразу после вывода второго QMessageBox::warning, т.е. при сохранении с переименованием. Но сам алгоритм исключает ситуацию, что будет сохранено более 255 символов (включая расширение с точкой). Что не так?

  • Вопрос задан более года назад
  • 503 просмотра

Простой 13 комментариев

Так а ошибка какая?
Ваш алгоритм неправильно считает длину имени, или ошибка при попытке переименовать файл?
Что в тексте ошибки?

EgoRusMarch

Saboteur, Там у Виндовз полная фигня, ASCII помещается 234, а не ASCII - на кофейной гуще гадать только. Хотя я не знаю, может быть это так только на Windows 10, а на 7 будет как-то ещё.
Как же я ненавижу Виндовз, постоянно гемор с кодировками, ABI и прочей фигнёй. Например, у меня почему-то OpenCV 3.4.0 не линкуется, хотя я его собрал, но нет, хрен там, он бинарно несовместим из-за какой-то тупой ошибки CMake'a. Короче, бесконечное гадагние, тогда как на Linux всё чётко, внятно и понятно. 1. потому что utf-8 это не один и не два символа, а от 1 до 6.
2. Длина в NTFS может быть гораздо длиннее, просто непонятно какими интерфейсами вы пользуетесь.
проблема не в виндовз, а в отсутствии опыта.
опять таки на вопрос не отвечено

EgoRusMarch

Saboteur, ну да, поэтому просто ограничиваем символы ASCII и считаем до 255, либо чуть посложнее - считаем ASCII и не-ASCII помноженные на N. А тут фигня полная.
Алгоритм работает правильно, тут как бы очевидно, он простой как пень. Я методом научного тыка установил, что 234 символа ASCII, не больше. С криллицей - не понятно пока, там ещё проблемы с кодировкой from QString to std::filesystem::path. Это я чуть позже исправлю и узнаю, надеюсь. Лучше бы, когнечно, СУБД использовать, а не фигнёй маяться этой.
Да, опыт то можно на любом г****е получить, вот только он будет неприятный. C:\test\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\veryvery-long-folder\myfilename.txt
681, никаких проблем.
Вам нужно ковырять ваш код

Да нет, фигня какая-то у тебя в понимании вопроса, а в WinAPI все качественно и стабильно уже третий десяток лет.

MAX_PATH определяется значением 260 . Это - максимальная длина строки, принимаемой API функциями в качестве ASCII-представления пути. Ограничения в 255 символов в природе нет. А если учитывать эффект от SetCurrentDirectoryA, то лимитов на длину ASCII-представления пути тоже нет. 260 символов - это лимит промежуточного буфера, в который будет скопировано ASCII-представление твоего пути перед дальнейшей работой с ним.

С UTF-8 WinAPI работать не умеет.

В WinAPI есть два набора функций, одни принимают ASCII-строки и именуются суффиксом A , другие принимают UCS2-строки и именуются суффиксом W . Твой UTF-8 сперва надо перевести в UCS2/UTF-16 и только потом передавать в W -функцию.
Все та же SetCurrentDirectoryW уже спокойно сможет перевести текущую рабочую директорию процесса в папку, в пути которой присутствуют этнические символы. ASCII-вариант тоже может, но только при правильном приведении кодировки строк представления путей. Это та еще задачка по сложности.

В WinAPI существует UNC-нотация путей, в которой лимит на длину пути соответствует лимиту файловой системы. Например, это будет 32КБ для NTFSv3.

Нормальный инженер на производстве сегодня работает только с ExW -функциями (при наличии вариантов с данными суффиксами). Строки, особенно путей, в WinAPI передает только в UCS2/UTF-16, а пути всегда приводит к UNC-нотации.

Во всех операционных системах и для всех файловых систем существуют определённые лимиты на:

  • размер имени файла
  • на полный путь файла (который включает папки и подпапки)

Операционная система Windows не является исключением, в ней длина имени файла или папки ограничена 255 символами, а вся длина пути ограничена примерно 32,000 символами.

Имеется ряд исключений, когда разрешённая длина файла должна быть меньше этих значений:

  • предыдущие версии Windows
  • сетевые диски
  • оптические диски CD и DVD

К сожалению, Windows весьма «молчалив» в ситуациях, когда возникают проблемы с длиной имени файла или пути на сетевых носителях. В результате, часть файлов может отображаться нормально, а часть отсутствовать. Если файлов много, то не всегда просто понять, все ли они на месте. Признаками того, что некоторые файлы на сетевой папке имеют слишком длинное имя является:

  • отсутствует файл, который точно должен быть или который виден при подключении диска напрямую (а не через сеть)
  • при создании файла возникает ошибка, что такой файл уже существует, хотя его не видно

При поиске по файлам средствами ОС, эти файлы также недоступны для индексации и поиска по ним.

Все программы, от стандартного проводника Windows до сторонних файловых менеджеров не способны увидеть эти файлы со слишком длинными именами, при этом каких-либо ошибок не возникает.

Подтвердить проблему слишком длинного имени на сетевом носителе можно командой вида:

вызывает следующую ошибку из-за того, что в папке имеется файл со слишком длинным именем:


Если вы работаете с сетевым диском и он подключён к Linux, то вам может помочь инструкция «Как найти имена файлов, чья длина превышает определённое значение».

В остальных случаях, попробуйте следующие советы:

1. (если слишком длинный путь до файла) Вначале скопируйте папку на более высокие уровни в windows эксплорере и затем переместите их на ваш локальный компьютер

2. (если имена файлов слишком длинные) Вначале попробуйте поместить их в архив программами zip/rar/7z и затем скопируйте файл архива на свой локальный компьютер и извлеките его содержимое

3. Попробуйте встроенную программу ROBOCOPY:

4. Попробуйте перед путём добавить \\?\

5. Используйте сторонне программное обеспечение (о нём далее)

FastCopy — это проект с открытым исходным кодом на C, написанный SHIROUZU Hiroaki и это "Самое быстрое программное обеспечение для копирования/удаления файлов на Windows." Программа поддеррживает UNICODE и более чем MAX_PATH (260 символов) в путях имён файлов.

Если имеются сотни путей, которые слишком долго исправлять, то используйте инструмент "Path Tool Long Auto Fixer".

yasson059

Существует 4 варианта ответа: 1. 8 символов 2. обязательно 3 символа 3. меньше или равно 3 символам 4. не более 256 символов Проводил на этом сайте опрос, мнения у людей разошлись. Возможно что под DOS 3 буквы, под windows - до 255 включительно ? Только желательно не просто указать цифру, а дать ссылку где можно об этом почитать или аргументировать. Всем спасибо.

Новые вопросы в Информатика

Какие клавиши на клавиатуре достаточно нажать одновременно для быстрого пере Ctrl n End Ctrl n Page Up Ctrl n Home Ctrl n Page Down ​

Верно ли, что необходимо щёлкнуть по нижней стрелке полосы прокрутки, для того чтобы экр переместилась на одну строку вниз? неверно верно​

Помогите пожалуйста. условие Сопоставить, а не пойму что именно делать ​

На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л. По каждой дороге можно двигаться только в одном направлении, указанном … стрелкой. Сколько существует различных путей из города А в город Л, проходящих через город Ж, но не проходящих через город Д?

Во всех следующих задачах использовать цикл while 1) Напишите программу, которая выводит на экран числа от 1 до 20 2) Введите из консоли число n. Выве … дите числа от 1 до 1 (включительно). 3) Создайте две переменных аи b. Присвойте им по одному любимому числу. Выведите на экран числа от а до b. Например, если вы выбрали числа 3 и 7, то на экран должен быть вывод 34 567 4) Напечатайте числа от 10 до 1 (т.е. в обратном порядке) 5) Напечатайте числа от 0 до 30, которые делятся на 3 (т.е. числа 0, 3, 6, 9, . , 30) Задания на доп. Плюс: 6) (*) Вывести на экран числа 139 27 81 , используя цикл while 7) (*) Найти все числа в промежутке от 1 до 100, которые делятся на Зи не делятся на 5. Код с занятия для похожей задачи: 1 i = 0 2 - while i &lt;= 20: 3 if i % 2 == 0 and i % 3 != 0: 4 print(i, end=" ") i += 1 6 print("\nРабота программы завершенна")

Читайте также: