Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 26, 2009 13:28:46

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Офлайн

#2 Дек. 26, 2009 13:41:16

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Slon
Это не linux, это винда =))) От держи =)

http://msdn.microsoft.com/en-us/library/ee681827%28VS.85%29.aspx#limits

Максимальная длина имени файла — 256 символов.
Максимальная длина пути — 32,767 символов Юникода, при этом каждый компонент пути не превышает 255 символов.
Я понимаю что на Линухе мне было проще ;)

Но насколько я понимаю общая длина точно меньше чем 32,767 , а каждая из подпапок(и имя файла тоже) даже в представлении юникода меньше 256 символов.
alex@debian-gate:~$ cat ./test.txt
D:
Documents
242
\xcf\xf0\xee\xe5\xea\xf2\xfb
\xc2\xd3\xc7\xdb
\xcc\xc3\xd3\xca\xc8 \xf2\xe5\xe0\xf2\xf0 \xd5\xe8\xec\xea\xe8
\xce\xf2\xef\xf0\xe0\xe2\xea\xe0
\xc8\xed\xf2\xe5\xf5
\xcc\xc3\xd3\xca\xc8 \xd5\xe8\xec\xea\xe8 30-01-09
\xf1\xe2\xe5\xf2-\xec\xe5\xf5\xe0\xed\xe8\xea\xe0
\xcc\xc3\xd3\xca\xc8 \xd2\xca\xc7 \xd5\xee\xf0\xe5\xee\xe3\xf0\xe0\xf4\xe8\xf7\xe5\xf1\xea\xe8\xe9 \xe7\xe0\xeb \xd1\xe2\xe5\xf2 \xdd\xeb\xe5\xea\xf2\xf0\xee\xec\xe5\xf5\xe0\xed\xe8\xea\xe0
UKI-EO3.07.E7_Shema_razm-ya_oborud-ya._Uroven_svetoregulyatornoi_i_sofitov_repeticionnogo_horeograficheskogo_zala.dwg
alex@debian-gate:~$ cat ./test.txt | wc -L
189
alex@debian-gate:~$cat ./test.txt | wc
12 21 589



Отредактировано (Дек. 26, 2009 13:42:45)

Офлайн

#3 Дек. 26, 2009 13:47:14

Slon
От:
Зарегистрирован: 2009-03-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Честно я не думаю что дело в пути, а вот имя файла…. попробуй папку в которой находится файл куданить переместить

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



Офлайн

#4 Дек. 26, 2009 13:52:08

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Slon
Честно я не думаю что дело в пути, а вот имя файла…. попробуй папку в которой находится файл куданить переместить

Тут узнаешь даст ли тебе винда это сделать. У меня была похожая бага, всплыла когда начал переносить профиль пользователя.
Без проблем переместил на рабочий стол и обратно. Думаю что дело все-таки не в винде, т к в Автокаде этот файл нормально открывается - еслиб путь не соответствовам требованиям WinAPI то тоже бы вылетало. Имхо проблема именно в реализации os.stat на винде.



Офлайн

#5 Дек. 26, 2009 13:55:53

Slon
От:
Зарегистрирован: 2009-03-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

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



Офлайн

#6 Дек. 26, 2009 14:01:33

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Slon
не факт, я уже видел такое. Файл с очень длинным именем. работать можно, скопировать нельзя
Повторю - файл и папка без проблем копируются или перемещаются куда угодно (проверил раза 3). Как по сети так и локально.

updated:

Приношу свои извинения - моя ошибка. Оказывается таких файликов там много (с одинаковым именем). Я смотрел не на тот. Действительно нашел такой файлик который не перемещается, не открывается и не копируется. Вопрос - что с ним сделать можно?



Отредактировано (Дек. 26, 2009 14:09:39)

Офлайн

#7 Дек. 26, 2009 14:14:09

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Alex2ndr
for ph,dirs,files in os.walk(dirpath):
еще
Попробуйте не использовать os.walk().
Недавно заметил у него такую особенность поведения - если он думает что путь хоть одного файла внутри каталога слишком длинный, то он исключает из выдачи весь каталог.
То же самое если хоть один файл недоступен.
Я использовал os.listdir() и обрабатывал ошибки отдельно для кажного файла.

Всё под виндой.



Офлайн

#8 Дек. 26, 2009 14:21:44

Slon
От:
Зарегистрирован: 2009-03-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Alex2ndr
Slon
не факт, я уже видел такое. Файл с очень длинным именем. работать можно, скопировать нельзя
Повторю - файл и папка без проблем копируются или перемещаются куда угодно (проверил раза 3). Как по сети так и локально.

updated:

Приношу свои извинения - моя ошибка. Оказывается таких файликов там много (с одинаковым именем). Я смотрел не на тот. Действительно нашел такой файлик который не перемещается, не открывается и не копируется. Вопрос - что с ним сделать можно?
Переименовать, тогда файл будет доступен.



Офлайн

#9 Дек. 26, 2009 22:08:04

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

knkd
Alex2ndr
for ph,dirs,files in os.walk(dirpath):
еще
Попробуйте не использовать os.walk().
Недавно заметил у него такую особенность поведения - если он думает что путь хоть одного файла внутри каталога слишком длинный, то он исключает из выдачи весь каталог.
То же самое если хоть один файл недоступен.
Я использовал os.listdir() и обрабатывал ошибки отдельно для кажного файла.

Всё под виндой.
Я работал с ней несколько раз. К сожалению os.listdir() не способно полноценно заменить os.walk(). Если папка имеет хоть какую-то вложенность, что чтобы пройти на заранее неизвестный ее уровень нужно написать рекурсивную функцию - а сделав это мы и получим тот же самый os.walk() (я смотрел исходники - она так и реализована - смотрит через listdir каталог, потом файлы просто передает, а для каталогов вызывает себя же). К тому же проблема путей не в самой os.walk() а в том к чему она обращается за информацией - isdir, islink, которые в свою очередь обращаются к os.stat и os.lstat , а что там дальше я не осилил т к там уже идут модули на С, а я его не знаю - но все ошибки живут где-то там. Таким образом нет большой разницы чем обрабатывать - os.listdir() или os.walk(). А если вам нужна отработка ошибок, то у os.walk есть параметр onerror в который можно передать функцию для обработки ошибок. Все что я сказал я говорю про линуховый питон 2.5 - но не думаю что виндовый сильно отличается.

Slon
Alex2ndr
Slon
не факт, я уже видел такое. Файл с очень длинным именем. работать можно, скопировать нельзя
Повторю - файл и папка без проблем копируются или перемещаются куда угодно (проверил раза 3). Как по сети так и локально.

updated:

Приношу свои извинения - моя ошибка. Оказывается таких файликов там много (с одинаковым именем). Я смотрел не на тот. Действительно нашел такой файлик который не перемещается, не открывается и не копируется. Вопрос - что с ним сделать можно?
Переименовать, тогда файл будет доступен.
Увы - переименовать его тоже нельзя - с ним вообще ничего сделать нельзя - ни открыть, ни копировать, ни переместить, ни удалить. Написали спец скрипт для AVZ - даже он не смог удалить. У меня есть еще 2 варианта - но пробовать я их буду уже на следующей неделе. Причем самое интересное, что я нашел этот файл в 5 местах - но так странно он себя ведет только в 2-х из них.



Офлайн

#10 Дек. 27, 2009 12:47:22

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка длинного имени в Windows

Alex2ndr
Таким образом нет большой разницы чем обрабатывать - os.listdir() или os.walk(). А если вам нужна отработка ошибок, то у os.walk есть параметр onerror в который можно передать функцию для обработки ошибок.
Не знал. Я именно использовал рекурсивную функцию с обработкой ошибок внутри. А раз разницы нет и переделывать уже не буду :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version