python на xp: errno 13 Отказано в разрешении - ограничение на количество файлов в папке? - PullRequest
0 голосов
/ 21 октября 2010

Я использую Python 2.6.2 на XP.У меня есть большое количество текстовых файлов (100k +), распределенных по нескольким папкам, которые я хотел бы объединить в одну папку на внешнем диске.

Я пробовал использовать shutil.copy () и shutil.copytree() и distutils.file_util.copy_file () для копирования файлов из источника в место назначения.Ни один из этих методов не успешно скопировал все файлы из исходной папки, и каждая попытка заканчивалась IOError Errno 13 Permission Denied, и я не могу создать новый файл назначения.

Я заметил, что все папки назначения, которые я использовал, независимо от используемых исходных папок, закончились ровно 13,106 файлами.Я не могу открыть какие-либо новые файлы для записи в папках с таким количеством (или более файлов), поэтому я могу получить Errno 13.

Буду признателен за предложения о том, может ли эта проблема возникать и почемупроисходит

большое спасибо, ник

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

Вы используете FAT32? Максимальное количество записей каталога в папке FAT32 составляет 65,534. Если имя файла длиннее 8,3, оно займет более одной записи каталога. Если вы набираете номер 13 106, это означает, что каждое имя файла достаточно длинное, чтобы требовать пять записей каталога.

Решение: используйте том NTFS; он не имеет ограничений для каждой папки и изначально поддерживает длинные имена файлов (то есть вместо использования 8.3 записей). Общее количество файлов на томе NTFS ограничено примерно 4,3 млрд., Но они могут быть помещены в папки в любой комбинации.

0 голосов
/ 21 октября 2010

Я предполагаю, что ваш внешний диск отформатирован 32 и что имена файлов, которые вы записываете на него, имеют длину около 45 символов.

FAT32 может иметь только 65536 записей в каталоге. Длинные имена файлов используют несколько записей каталога каждый. А также "." всегда занимает одну запись. То, что вы можете написать 65536/5 - 1 = 13106 записей, настоятельно предполагает, что ваши имена файлов занимают 5 записей каждое и что у вас есть файловая система FAT32. Это связано с тем, что существует код, использующий 16-битные числа в качестве смещений записей каталога.

Кроме того, вы не хотите искать в многотомных каталогах записей в FAT - поиск является линейным. То есть fopen (some_file) будет заставлять ОС линейно перемещаться по списку файлов, начиная с начала каждый раз, пока не найдет some_file или не выйдет за конец списка.

Краткий ответ: Каталоги - это хорошо.

0 голосов
/ 21 октября 2010

У меня не было бы столько файлов в одной папке, это кошмар обслуживания.НО, если вам нужно, не делайте этого на FAT: у вас есть макс.64k файлов в папке FAT.

Прочитайте сообщение об ошибке

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

...