- Мир цифровой информации
- Понятия «путь» и «имя файла»
- Зарезервированные символы и имена
- Ограничения на длины имен файлов и путей
- Существует ли предел длины имени файлов в Windows
- Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?
- 12 ответов
- Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?
- Ограничение длины файлов в Windows особенности и тонкости
Мир цифровой информации
Если вам кажется, что нет ничего проще, чем придумать имя для файла или папки, то скорее всего вы ошибаетесь. Существуют правила из-за которых нельзя назвать файл любым именем как обычный физический предмет. Для начала проясним, что такое имя файла, и как оно используется.
Понятия «путь» и «имя файла»
Очень часто в компьютерной литературе используются термины «путь» и «имя файла» под разными значениями. Обычно под словом «путь» понимают адрес или расположение файла, т. е. диск, папка и подпапки в которых расположен файл. Однако Microsoft и другие считают, что в путь к файлу входит не только его расположение но и само имя файла. А некоторые подразумевают под словом «путь» только имена файла и папок, в которых он расположен, без указания диска. Некоторые пользователи полагают, что «имя файла» не включает расширение. В данной статье расширение всегда является частью имени файла. На примере ниже синим цветом выделен путь к файлу, а красным имя файла.
X:\папка\подпапка\ файл.расширение
Зарезервированные символы и имена
Большинство часто употребляемых символов разрешается использовать в имени файла. Имя файла не должно содержать „ ” (знак больше), „:” (двоеточие), „ «” (двойные кавычки), „ /” (слеш), „ \” (обратный слеш), „ |” (вертикальная черта), „ ?” (вопросительный знак), „ *” (звездочка), а также не может заканчиваться точкой или пробелом. Файлы также нельзя называть зарезервированными именами устройств: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, и LPT9.
Ограничения на длины имен файлов и путей
Существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам. Этот предел называют термином MAX_PATH. На самом же деле на практике пределы для имен еще меньше из-за ряда других ограничений. Например, каждая строка на конце должна содержать так называемый нулевой символ, который обозначает конец строки. Несмотря на то, что маркер конца строки не отображается, он учитывается как отдельный символ при подсчете длины, а значит остается 259 символов доступных для имени файла и пути к нему. Первые три символа в пути используются для обозначения диска (например, C:\). Это уменьшает предел для имен папок, подпапок и файла до 256 символов.
На имя объекта (папки или файла) наложено ограничение длины 255 символов. Этот предел действителен только, если объект не расположен внутри папки. Так как при расположении объекта внутри папки, сумма длин всех папок в которых он расположен, разделителей и имени объекта ограничена 256 символами, то предел длины самого имени объекта меньше 255 символов.
Существует ли предел длины имени файлов в Windows
Во всех операционных системах и для всех файловых систем существуют определённые лимиты на:
- размер имени файла
- на полный путь файла (который включает папки и подпапки)
Операционная система 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».
Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?
Я разрабатываю таблицу базы данных, в которой будут храниться имена загруженных файлов. Какова максимальная длина имени файла в NTFS, используемого в Windows XP или Vista?
12 ответов
Отдельные компоненты имени файла (то есть каждый подкаталог по пути и окончательное имя файла) ограничены 255 символами, а общая длина пути — примерно 32 000 символов. Однако, как правило, следует стараться ограничивать длину пути до 260 символов ( MAX_PATH ), когда это возможно. См. http://msdn.microsoft.com/en-us/library/aa365247.aspx для получения полной информации.
Это 257 символов. Точнее: Сама NTFS устанавливает максимальную длину имени файла в несколько тысяч символов (около 30 000 с чем-то). Тем не менее, Windows устанавливает максимальную длину 260 для пути + имя файла. Папка drive + занимает не менее 3 символов, поэтому вы получите 257.
Это то, что говорит «Необработанное исключение» в Framework 4.5 при попытке сохранить файл с длинным именем файла:
Указанный путь, имя файла или оба они слишком длинные. Полное имя файла должно содержать менее 260 символов, а имя каталога должно содержать менее 248 символов.
Согласно MSDN , это 260 символов. Он включает в себя » » — невидимый завершающий нулевой символ, поэтому фактическая длина равна 259.
Но прочитайте статью, это немного сложнее.
Длина в NTFS — 255. Поле NameLength в NTFS $Filename является байтом без смещения; это дает диапазон 0-255.
Имя файла iself может находиться в разных «пространствах имен». Пока что есть: POSIX, WIN32, DOS и (WIN32DOS — когда имя файла может быть изначально именем DOS). (Поскольку строка имеет длину, она может содержать \ 0, но это может привести к проблемам и не находится в указанных выше пространствах имен.)
Таким образом, имя файла или каталога может содержать до 255 символов. При указании полного пути в Windows вам необходимо поставить префикс пути с помощью \\? \ (или используйте \\? \ UNC \ server \ share для путей UNC) , чтобы пометить этот путь как расширенный (
32 тыс. символов). Если ваш путь длиннее, вам придется задавать рабочий каталог по пути (тьфу — побочные эффекты из-за настройки всего процесса).
Я добавляю это к утвержденному выше ответу.
ЧТОБЫ БЫТЬ ЧИСТО, люди считают, что это 255-260 символов, потому что это все, что поддерживает Windows Explorer. Он будет ошибочно делать что-то вроде копии файла с именами файлов длиннее этого. Тем не менее, программа может читать и записывать гораздо более длинные имена файлов (именно так вы получаете длины, на которые в первую очередь жалуется Explorer). «Рекомендуемое исправление» от Microsoft в подобных ситуациях — открыть файл в исходной программе, в которой он был написан, и переименовать его.
В соответствии с новой документацией Windows SDK (8.0) представляется, что введен новый предел пути. Существует новый набор пути функции обработки и определение PATHCCH_MAX_CCH, например:
Эта часть официальной документации ясно говорит, что это 255 символов Unicode для NTFS, exFAT и FAT32 и 127 символов Unicode или 254 ASCII для UDF.
Кроме того, максимальная длина имени пути всегда составляет 32 760 символов Юникода, причем каждый компонент пути не должен превышать 255 символов.
255 символов, хотя полный путь также не должен быть длиннее. В Википедии есть хорошая таблица на эту тему: http://en.wikipedia.org/wiki/Filename .
Я не могу создать файл с именем + period + extnesion в WS 2012 Explorer, длина которого превышает 224 символов. Не стреляйте в курьера!
В CMD того же сервера я не могу создать более длинное имя символа 235 :
Система не может найти указанный путь.
Файл с именем из 224 символов, созданный в Проводнике, нельзя открыть в Notepad ++ — вместо этого он просто создает новый файл.
238 Я проверил это под Win7 32 бит с помощью следующего скрипта bat:
Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?
Я проектирую таблицу базы данных, которая будет содержать имена загруженных файлов. Какова максимальная длина имени файла в NTFS, используемого Windows XP или Vista?
Отдельные компоненты имени файла (т. Е. Каждый подкаталог вдоль пути и окончательное имя файла) ограничены 255 символами, а общая длина пути — примерно 32 000 символов.
Однако в Windows нельзя превышать MAX_PATH значение (259 символов для файлов, 248 для папок). Видеть http://msdn.microsoft.com/en-us/library/aa365247.aspx для полной информации.
Это 257 символов. Если быть точным: NTFS сама устанавливает максимальную длину имени файла в несколько тысяч символов (около 30 000 с чем-то). Однако Windows устанавливает максимальную длину 260 для пути + имя файла. Папка drive + занимает не менее 3 символов, поэтому вы получите 257.
Вот что говорит «Необработанное исключение» в Framework 4.5 при попытке сохранить файл с длинным именем файла:
Указанный путь, имя файла или оба они слишком длинные. Полное имя файла должно быть не более 260 символов, а имя каталога должно быть не более 248 символов.
199 на Windows XP NTFS, я только что проверил.
Это не теория, а просто примерка моего ноутбука. Могут быть смягчающие эффекты, но это физически не позволит мне увеличить его.
Интересно, есть ли другие ограничения, ограничивающие это? Попробуйте сами.
По данным MSDN , это 260 символов. Он включает в себя » » — невидимый завершающий нулевой символ, поэтому фактическая длина составляет 259.
Но прочитайте статью, это немного сложнее.
Длина в NTFS составляет 255. NameLength Поле в $Filename атрибуте NTFS является байтом без смещения; это дает диапазон 0-255.
Имя файла iself может находиться в разных «пространствах имен». Пока есть: POSIX, WIN32, DOS и (WIN32DOS — когда имя файла может быть изначально именем DOS). (Поскольку строка имеет длину, она может содержать \ 0, но это может привести к проблемам и не находится в указанных выше пространствах имен.)
Таким образом, имя файла или каталога может содержать до 255 символов. При указании полного пути в Windows необходимо указать префикс пути \\? \ (Или использовать \\? \ UNC \ server \ share для путей UNC), чтобы пометить этот путь как расширенный (
32 тыс. Символов) , Если ваш путь длиннее, вам придется установить свой рабочий каталог по пути (тьфу — побочные эффекты из-за настройки всего процесса).
Ограничение длины файлов в Windows особенности и тонкости
Вы когда-нибудь сталкивались с сообщением об ошибке в Windows, в котором говорилось бы о не возможности скопировать (переместить) файл и о том, что имя одного из файлов слишком большое? Если да, то вы, наверное, задавались вопросом почему такое сообщение появилось (пример ниже на картинке). В данной статье будут объяснены особенности и тонкости ограничений, которые накладываются на длину имени файла в Windows.
В зависимости от структуры файловой системы, на длину имен файлов будут накладываться различные ограничения. Важно помнить и понимать, что имя файла складывается не только из расширения и того названия, которое вы дали ему при создании. Имя файла включает в себя всю необходимую операционной системе информацию для точной идентификации файла. Другими словами, имя файла включает в себя диск и все каталоги, внутри которых находится файл. Кроме того, имя может содержать различную системную информацию (и не обязательно, что вы ее будете где-либо видеть).
Примечание: Если вы не знали, то в большинстве файловых систем каталог — это разновидность файла, но с нулевым размером данных.
Существует множество различных файловых систем, каждая из который по-своему определяет структуру имени файла, включая способ построения пути к файлу. К примеру, на небольших usb устройствах хранения данных, обычно, используется система FAT32. А на оптических дисках (CD/DVD) обычно используется UDF или ISO 9660. На системных дисках последних ОС Windows используется файловая система NTFS, которая и станет предметом данной статьи (как наиболее распространенная для Windows).
Примечание: К примеру, на системных дисках с Windows XP, часто, использовалась файловая система FAT32. Однако, у нее был существенный (для сегодняшнего времени) недостаток — это ограничение на максимальный размер файла в 4 Гб. NTFS же не имеет такого ограничения.
Существует некоторая путаница в цифрах максимальной длины имени файла в файловой системе NTFS, которую вы можете обнаружить в различных источниках. Для начала, есть абсолютный предел, введенный Windows API, и он составляет 260 символов. Тем не менее, практический пределе меньше, чем 260 символов. Например, все имена должны иметь нулевой терминатор в конце. Обычно, этот маркер видит только Windows, но он все равно воспринимается, как один символ. Таким образом ,у вас есть только 259 доступных символов. Еще три символа используются для указания диска (например, C:\). Таким образом, реальный предел для имени, содержащего все каталоги, включая вложенные, и название самого файла вместе с расширением, уменьшается до 256 символов.
Примечание: Windows API — ядровой интерфейс, на котором строится вся операционная система и который используют программы.
Тем не менее, есть еще одна тонкость, связанная с тем, как Windows кодирует символы. Ни один индивидуальный объект (файл или каталог) не может иметь имя длиннее 255 символов. При этом, имя включает в себя пробелы и обратную косую черту, которая используется в качестве разделителей. Этот предел в 255 символов часто цитируется, как предел для названия отдельного файла, но, на практике, это относится только к именам файлов в корневом каталоге без каких-либо каталогов.
Существует и еще одно ограничение на длину имени файла, которое часто упускается из виду. Обычно, по умолчанию Windows поддерживает альтернативное имя файла, используя старую систему именования 8.3. Когда вы создаете папку, Windows будет резервировать 12 символов для альтернативного имени файла, оставляя 244 символов для всех содержащихся внутри объектов. Использование системы именования 8.3 можно отключить, но это может вызвать проблемы, при использовании старых 16-битных программ.
Примечание: Система именования 8.3 довольно проста. 8 — это количество символов наименования. «.» — это разделитель между названием и расширением. 3 — это количество символов для расширения. 12 — это 8 + 1 + 3.
Примечание: Подробнее о том, как отключить поддержку 8.3, смотрите информацию по адресу https://technet.microsoft.com/ru-ru/library/cc778996.aspx. Учтите, что вам потребуется редактировать реестр.
Существует так же механизм, который позволяет использовать более длинные имена файлов. Например, сетевым системам, порой, требуется больше гибкости в именах файлах. Поэтому, Windows API включает в себя специальную систему обращения для поддержки очень длинных Unicode имен в блоках по 255 символов. Эти длинные имена начинаются с префикса «\\?\» (без кавычек). Так что, если вы столкнулись с проблемой в имени файла, у которого длина слишком большая, то попробуйте использовать этот префикс в имени пути, например, «\\?\c:\file.txt» (без кавычек).
Большинство случаев ошибок слишком длинных путей имен файлов связаны именно с большим уровнем вложенности каталогов. Поэтому, знание об ограничениях позволит вам быть осторожными, при создании структуры ваших каталогов, и избежать проблем, связанных со слишком длинными именами.