Поддержка длинных имен файлов windows 7. Если не удаляется файл с длинным именем и появляется ошибка, что файловая система не поддерживает такие длинные имена

Не секрет, что проводник Windows, как и большинство других Windows-приложений, включая PowerShell, не умеют работать с объектами файловой системы с глубокой вложенностью папок, длина пути к которым превышает 260 символов . Причем это ограничение существует только на уровне приложений, а сама файловая система NTFS поддерживает пути к файлам вплоть до 32767 символов.

Данное ограничение наложено библиотекой Win32 API , а которой максимальная длина пути составляет 260 символов (MAX_PATH=260 ). В общем случае путь формируется из следующих элементов: +[путь_из_256_символов]+[] , причем максимальная длина одного каталога/файла в NTFS — 255 символов в Unicode. При использовании юникодных функций API, возможно использовать путь до 32767 символов. Благодаря этому многие сторонние программы (те же популярные файловые менеджеры, например FAR и Total Commander ) без каких-либо трудностей обрабатывает файлы/папки, длина пути к которым превышает 260 символов.

Совет . Обойти это ограничение Win32 API и работать с длинными именами файлов можно за счет использования UNC-формата пути, указывая абсолютный путь к файлу с использованием префикса extended-length path \\?\ . Например, так \\?\C:\SomeLongPath\LongNameFile.txt

Это ограничение также не действует при сетевом доступе пользователей к файлам по протоколу SMB (за счет этого каталожные структуры с длинными путями нередкость именно на файловых серверах с пользовательскими данными). Администратор, обслуживающий данный сервер не может через стандартный интерфейс проводника Windows Explorer управлять (удалять/перемещать) файлы с длинными путями. При попытке создать/скопировать файл в такой каталог, появляется ошибка:

Destination Path Too Long . The file name (s) would be too long for the destination folder. You can shorten the file name and try again, or try a location that has a shorten path

Другие программы/диалоговые окна могут сообщать о наличии ограничения по своему.

Согласитесь забавно, что за окном 2014 год, а мы до сих пор говорим об ограничении в 260 символов на максимальную длину пути в Windows… Но похоже в ближайшее время никаких кардинальных изменений не предвидится, и даже в совсем свежей Windows 10 Technical Preview это ограничение все еще существует.

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

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

The file name(s) would be too long for the destination folder. You can shorten the file name and try again, or try a location that has a shorten path.

Powershell также не умеет корректно обрабатывать каталоги и файлы с большими путями, превышающими 260 символов. При попытке удалить каталог с такими файлами (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath) появляется ошибка:

Remove-Item .\verylongpath -Recurse

Remove-Item: The specified path, file name, or both are too long. The fully qualified file name must be less than 260
characters, and the directory name must be less than 248 characters.
At line:1 char:1
+ Remove-Item .\verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C:\Install\MS S...it\verylongpath:String) , PathTooLongExcepti
on
+ FullyQualifiedErrorId: RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

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

Mklink /d c:\install\link “C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath”

Еще один вариант, напоминающий работу с символьной ссылкой — сопоставить проблемную папку виртуальному диску (в нашем примере X:), тем самым также сократив длину пути:

Subst X: “C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath”

Теперь можно работать с данными на диске X:, пути к файлам в котором не будут превышать лимит. После окончания работы можно удалить виртуальный диск:

Subst X: /d

Но лично мне больше всего для задачи удаления данных в таких ситуациях нравится возможности robocopy.exe , которая поддерживает работу с длинными путями.

С помощью опции /MIR , утилита robocopy может создать полную копию (зеркало) исходного каталога в целевом. И, если исходная папка пустая, все данные в целевой папке также очищаются. Создадим пустую папку C:\Install\test и с помощью аргумента /MIR выполним копирование содержимое тестовой папки в целевую (если имя папки содержит пробелы или кириллические символы, путь нужно взять в кавычки).

Robocopy /MIR C:\Install\test "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

После выполнения команды содержимое каталога C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath очищается (заменятся содержимым пустого каталога).

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

Вредная операционная система Windows не даёт Вам удалить файл и кричит, что у него «Слишком длинный путь к источнику»? В этой статье я расскажу Вам как легко и просто, без каких-либо программ, победить эту напасть сократив имя файла.

Слишком длинный путь к источнику — почему?

Сразу хочу объяснить, почему появляется такое системное предупреждение и не удаётся произвести с файлом (папкой) элементарные действия копирования или удаления…

В самом уведомлении написан ответ на этот вопрос — файловая система Windows не поддерживает (не понимает) имена исходных файлов длиннее 255 символов.

Но имя файла или папки у Вас короткое, например, «Фото из отпуска»? Дело в том, что «глупая» система воспринимает весь путь к файлу как его имя. Если Ваш файл или папка лежат где-то слишком глубоко в файловом менеджере, то его имя для неё будет выглядеть примерно так…

Вот и собираются символы имени в банду из более 255 штук.

Как удалить неудаляемый файл или папку в таком случае? Очень просто — нужно сократить имя файла (пути) методом переименования вложенных друг в друга папок.

Как удалить файл с длинным именем

Покажу на своём примере как удалить файл с длинным именем у которого, как пишет система, слишком длинный путь к источнику.

Вчера решил почистить свой компьютер от старых резервных копий сайта, а они не захотели удаляться. Как Вы догадались — появилось предупреждение о слишком длинном пути к источнику…

Начиная с самой первой папки в этом длинном пути — переименовал несколько штук…

…и повторил попытку избавиться от файла с теперь более коротким именем — он благополучно отправился в страну удалённых файлов.

Естественно, что новое имя файла (папки) должно состоять из одного символа или цифры, как у меня в примере.

Вот так просто решается проблема удаления файлов или папок с длинным именем. Это не единственный метод конечно. Можно специальными программами удалять или через реестр — я лишь показал ручной способ. У кого-то он займёт минуту всего, а у кого-то и полчаса — решать Вам, как сократить имя файла и слишком длинный путь к источнику.

До новых полезных советов и интересных компьютерных программ.

Вот пример структуры папок, которую я назвал «большой матрёшкой»:

Как видим, на диске «D» (Данные) есть исходная папка видео, в ней папка «Фильмы», в ней «Всё что нужно для просмотра фильмов» и далее таким же образом папка в папке. При этом многие папки имеют длинные названия названия — больше 10-15 символов, что в сумме даст объём символов во всех названиях больше 260. И если в конце такой «матрёшки» будет лежать файлик, то может получиться так, что работать с ним вы не сможете… Иногда сама система не даёт создать в конечном итоге папку или файл превышающий допустимое количество символов, но иногда почему-то такое происходит.

В начале для новичков поясню, что такое путь к файлу и папке. Путь – это так называемый адрес в компьютере, по которому располагается файл или папка. Например, файл под названием «Мой файл.txt» лежит на локальном диске D: в папке «Документы». Тогда путь к этому файлу будет выглядеть так:

D:\Документы\Мой файл.txt

Или, например, вот так будет выглядеть путь из примера выше, где я показал сложную структуру папок.

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

При попытке удалить файл с длинным названием пути к нему, вы получите окно с ошибкой такого рода:

Я попробовал искусственно воссоздать проблему и вот что у меня получилось.

На диске «D» создал папку коротким именем «1» и в неё поместил файл с очень длинным названием. Вот пример:

Теперь я ту папку «1» переименовываю тоже в какое-то очень длинное название, например:

Что интересно, Windows свободно даёт переименовать папку вот в такое длинное название, несмотря на то, что количество символов в названии этой папки + названии файла уже превышает 260! Ну и после такого вот переименования папки в длинное название, я уже не могу удалить файл, расположенный в ней и получаю ошибку, показанную .

Или вот ещё пример… Я обслуживаю сайт Московского приборостроительного техникума, в котором ранее работал на полную ставку и иногда для тестирования каких-то новых «плюшек» для сайта использую копию сайта на своём компьютере. А то вдруг я что-то нехорошее установлю и сайт на хостинге умрёт? :) А так я у себя на компьютере проверяю и если всё в порядке, то уже настраиваю на реальном сайте, расположенном на хостинге. Так вот, один раз я перенёс себе с хостинга весь сайт чтобы протестировать одну вещь и после того как закончил работать, решил удалить с компьютера папку с сайтом. Ведь весит она порядке 6 Гб. Сайт удалился весь, кроме ряда папок. Я начал смотреть и увидел, что не удалились те папки, которые содержали в себе файл с длиннющим названием в виде иероглифов:

Попытался ещё раз удалить этот файл с длинным названием и увидел туже ошибку, о которой выше упоминал. Попробовал переименовать, тоже не получается. Ну и пришлось думать над тем, как проблему решить.

Как решить проблему удаления папки / файла с длинным названием пути!

Я пробовал 2 способа как можно удалить папку / файл с длинным названием в пути к ним. Оба они технически не сложные (особенное 1-й), поэтому, думаю, сможет справиться новичок если выполнит всё точно также как я показываю:

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

    Тогда попробуйте просто переименовать папку, в которой лежит файл с длинным названием, например, в «1». Вернусь к одному из примеров выше. Вот имеется папка с длинным названием:

    Переименовываю через стандартный проводник Windows название той папки в «1» и вот как теперь выглядит путь к файлу:

    Теперь, с файлом можно спокойно работать, система даст его открыть, переименовать и удалить.

    Если же у вас длинное дерево папок, т.е. как матрёшка, в одной папке другая, в ней ещё, потом ещё, то переименовывать начинайте с самой первой папки из этой матрёшки. Не с последней по списку, а с первой!

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

    Способ заключается в том, что вы можете взять какую-то папку, например, в середине общего дерева и подключить её в виде виртуального диска. Виртуальный диск – это то, что напоминает нам обычный локальный диск, но который просто привязывается к определённой папке, например, для быстрого взаимодействия с ней.

    Допустим у вас есть примерно такой вот длинный путь:

    D:\Видео\Мои фильмы\Всё что нужно для просмотра фильмов\Программы для просмотра фильмов\Как открывать фильмы MP4\Список фильмов-примеров MP4\Перечень программ для открытия MP4\Что нельзя делать при открытии файлов MP4

    Предположим, что в самой последней папке у нас лежит какой-то проблемный файл, с которым мы не можем работать, поскольку путь к нему, как видим, весьма приличной длинны:)

    Мы можем взять и подключить одну из папок с длинным названием в середине пути в качестве виртуального диска. Пусть это будет папка «Программы для просмотра фильмов».

    Для подключения виртуального диска нам понадобится так называемая командная строка Windows, т.е. консоль.

    Открыть её можно через поиск Windows. В поиске так и наберите «Командная строка»:

    В окне командной строки нам нужно набрать команду:

    subst буква_виртуального_диска «путь_к_папке»

    Букву диска вы можете поставить любую, только чтобы она уже не была занята одним из локальных дисков. Например, у вас есть локальный диск C и D, а значит виртуальный диск вы уже не сможете обозвать той же буквой. Можно назвать, например, буквой «X», потому что она редко у кого используется в Windows.

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

    D:\Видео\Мои фильмы\Всё что нужно для просмотра фильмов\Программы для просмотра фильмов\

    Итак, итоговая команда в моём случае будет выглядеть вот так:

    subst X: «D:\Видео\Мои фильмы\Всё что нужно для просмотра фильмов\Программы для просмотра фильмов\»

    Чтобы выполнить введённую команду, нажимаем клавишу «Enter» на клавиатуре. Виртуальный диск будет создан.

    Теперь перейдём в проводник Windows, зайдём в раздел «Этот компьютер» (или «Компьютер») и видим там созданный виртуальный диск:

    Отличить его можете по букве. Я присваивал букву «X» виртуальному диску. Теперь если открыть этот виртуальный диск, то мы сразу окажемся в папке «Программы для просмотра фильмов». Т.е. мы взяли и срезали нафиг половину пути к конечной папке.

    Для сравнения…

    Ранее путь к конечной папке выглядел так:

    D:\Видео\Мои фильмы\Всё что нужно для просмотра фильмов\Программы для просмотра фильмов\Как открывать фильмы MP4\Список фильмов-примеров MP4\Перечень программ для открытия MP4\Что нельзя делать при открытии файлов MP4

    После подключения виртуального диска к папке «Программы для просмотра фильмов» путь к конечной папке выглядит так:

    X:\Как открывать фильмы MP4\Список фильмов-примеров MP4\Перечень программ для открытия MP4\Что нельзя делать при открытии файлов MP4

    Чувствуете разницу? Путь сокращён в два раза, поскольку буква диска сразу же направляет нас к папке в средине пути:) А поскольку путь сильно сокращён, наверняка теперь вы сняли ограничение по символам в названиях файлов и папок и сможете удалить файл или папку с длинным названием!

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

    Для этого снова откройте командную строку Windows и введите команду:

    Subst буква_виртуального_диска /d

    В моём случае буква диска «X», поэтому команда будет выглядеть вот так:

Когда я думал над вариантами решения проблемы, как удалить папку или файл с длинным названием, в интернете находил ещё такой вот вариант: удалить проблемный файл через программу «Total Commander». Попробовал, нифига не получилось, поэтому и советовать такой способ не стал:)) Да и способ, даже если он у кого-то бы и заработал, честно говоря не прикольный, потому что приходится ставить дополнительную программу на свой компьютер ради удаления одного лишь файла или папки с длинным названием…

Я думаю, при возникновении подобной проблемы, которая у меня возникала ни один раз, вам обязательно поможет один из вышеописанных способов.

На этом всё! До скорых встреч в следующих статьях;)

На одном из проектов довелось мне использовать модуль для Drupal - clientside validation. И не то чтобы модуль плохой, наоборот полностью выполняет свой функционал, а именно проверяет форму на стороне клиента. Но файлы модуля имеют довольно длинные названия, и вот из-за одного из таких файлов, наш git перестал работать адекватно. Поскольку записать информацию в эту папку уже не мог по причине следующей ошибки:

Не удается скопировать файл /папку. Слишком длинное имя / целевой путь конечного файла

Или тоже но на английском:

The file name(s) would be too long for the destination folder. You can shorten the file name and try again, or try a location that has a shorter path.

Проведя маленькое расследование оказалось, что максимальная длина пути которая поддерживается Windows 7 - 260 символов. А поскольку все проекты храняться у меня в папке C:\Users\\Documents\xampp\htdocs\git\ - то потенциально под угрозой оказались все проекты.

Варианты решения

Вариантов решения видел 2:

1. Перенести xampp в голову диска

2. Создать алиас для этого пути (Например диск с именем H)

Второй вариант показался более простым, ведь для xampp пути не поменяются, а gitом будем заходить в папки через созданный алиас. Ну еще для правильной работы IDE придется изменить путь проектам.

И так, для того чтобы Windows подставляла вместо Вашего длинного пути, имя диска - выполняем через cmd команду:

Subst H: C:\Users\\Documents\xampp\htdocs\git\

Статьи по теме: