Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2018 19:20:33

alexander4
Зарегистрирован: 2017-01-17
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка очень длинных путей windows

Добрый день!
Подскажите пожалуйста можно ли как-то работать с очень длинными путями в windows. Сейчас если я пытаюсь удалить папку путь к которой очень длинный, то вылетает ошибка, что такого файла или папки не существует. Можно ли это как-то обойти работая на windows 7?

Офлайн

#2 Янв. 15, 2018 20:11:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработка очень длинных путей windows

Может вы сделали ошибку в этом очень длинном пути?

Проверка элементарна, разбейте путь на элементы “some/long/path” -> и переходите по очереди в эти папки os.chdir(“some”);os.chdir(“long”) Путь укоротися и вы проверите какие части в нем правильные.

p.s.

Это очевидно не будет работать если у вас просто очень длинное имя директории. В досе есть сокращенные имена (8.3) их можно узнать командой dir /X



Офлайн

#3 Янв. 16, 2018 11:03:23

alexander4
Зарегистрирован: 2017-01-17
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка очень длинных путей windows

doza_and
Может вы сделали ошибку в этом очень длинном пути?
Нет не сделал, пути вычисляются автоматически, в результате обхода содержимого папки при помощи walk. В итоге некоторые папки удаляются (которые лежат “на поверхности”), а некоторые нет.
Так что тут проблема именно в обработке windows длинных путей.

Офлайн

#4 Янв. 16, 2018 11:08:19

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Обработка очень длинных путей windows

alexander4 все зависит от того каким модулем для работы с путями\удалении вы пользуетесь. У венды есть “огрничение” в 255 символов для имени файла. НО существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам, данное значение определено константой MAX_PATH в Windows API.

Выше doza_and уже написал нектороые пути решения проблемы как то: использовать пути формата 8.3, или переходить по очереди в подпапку.
Добавлю что в WINAPI есть юникод версии функций у которых ограничение на длинну пути составляет 32767 символов, в частности CopyFileW, DeleteFileW, RemoveDirectoryW. Можно использовать их напрямую через ctypes, или используя библиотеку pyWin32

Детальнее при имена файлов\папок и ограниченя венды читаем: https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365247(v=vs.85).aspx



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 16, 2018 11:11:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version