Многие пользователь сталкиваются с ситуацией, когда при удалении файла или папки Windows жалуется на то, что у объекта слишком длинное имя и удаление или копирование невозможно. Дело в том, что файловые системы FAT32 и NTFS имеют ограничение на
суммарную длину имён вложенных папок и файлов в 260 символов. То есть если у вас есть длинный путь из папок вложенных как матрешки одна в другую и количество символов в именах папок и нужного файла, начиная от корневой папки, превысит 260, то папка или файл будут недоступны для удаления, переименования, копирования. Поэтому невозможно также и переименовать файл или папку, которая в дереве папок находится за суммарным пределом 260 символов в именах.
Есть очень простой способ решения этой проблемы. Таких способов существует несколько, но этот самый простой и легкий. Нужно отметить, что данный способ не всегда срабатывает, но обычно его в большинстве случаев достаточно.
Итак, нужно просто укорачивать имена папок, начиная с корневой папки. Я обычно делаю это цифрами. Если одна папка в папке, то именую цифрой 1, если две, то 1 и 2 и так далее. Иногда достаточно переименовать одну или несколько папок. Обычно папки и файлы с такими длинными именами закачиваются из интернета, поскольку на серверах нет таких ограничений на имена. Также вполне возможно создание такой ситуации и на локальном компьютере. Как ни странно при создании файлов и папок Windows длину суммарного количества символов имён не ограничивает.
Эээээ… утверждение неверно.
Создай для опыта такой вот .cmd файл:
Set MyFolder=»D:\Имя папки длиной 244 символа -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123″
MkDir %MyFolder%
Echo Test! >> %MyFolder%\01234567890
Запусти! Теперь зайди в созданную папку (откуда угодно — из Проводника, из Far / Total Commander, из своей собственной оболочки) и попытайся создать хоть какую-то папку! Нихрена не получится! :))
Итак, максимальная длина имени папки — 244 символа, попытаешься больше — получишь: «Имя файла или его расширение имеет слишком большую длину».
Внутри этой папки нельзя создавать подпапки (даже однобуквенные!), но можно создать файл, у которого Имя + Расширение <= 11 символов (больше — низя!! почему 11? 8+3 — формат DOS'овского имени).
Суммарно получается: 244 + 11 = 255 символов — открываем windows.h и видим: #define MAXPATH 256 — вах-вах-вах! Какие молодцы Мелкомягкие, не обманули на этот раз 🙂
Мораль: в программах под Windows для хранения имён файлов / путей для задания размера используем MAXPATH (например: char FileName[MAXPATH]) и надеемся, что в наследнице Vista — Windows 7 Vienna (или в Longhorn) MAXPATH будет увеличиваться пропорционально увеличению возможностей файловой системы ОС.