2010-10-20 82 views
0

我在XP上运行Python 2.6.2。我有大量文本文件(100k +)分布在多个文件夹中,我想将它们合并到外部驱动器上的单个文件夹中。python on xp:errno 13权限被拒绝 - 限制文件夹中的文件数量?

我试过使用shutil.copy()和shutil.copytree()和distutils.file_util.copy_file()将文件从源文件复制到目标文件。这些方法都没有成功复制源文件夹中的所有文件,并且每次尝试都以IOError Errno 13权限被拒绝结束,我无法创建新的目标文件。

我注意到,无论使用哪个源文件夹,我使用的所有目标文件夹都以13106个文件结束。我无法打开任何新的文件在有这么多(或多个文件)的文件夹中写入,这可能是为什么我要Errno 13.

我很感激关于是否以及为何发生此问题的建议。

千恩万谢, 缺口

+0

在问题中提供您的代码。 – pyfunc 2010-10-20 22:51:06

回答

2

您是否使用FAT32? FAT32文件夹中的最大目录条目数是65.534。如果文件名长度超过8.3,则需要多个目录条目。如果您以13,106表示,这表明每个文件名都足够长以至于需要五个目录条目。

解决方案:使用NTFS卷;它没有每个文件夹的限制,并且本地支持长文件名(即不使用多个8.3条目)。 NTFS卷上的文件总数限制在43亿左右,但可以以任意组合放入文件夹中。

+1

添加链接:http://technet.microsoft.com/en-us/library/bb457112。aspx – pyfunc 2010-10-20 22:48:35

+0

感谢您提供非常有用的答案和链接。当我得到另一个外部驱动器或有机会重新格式化我的当前驱动器时,我会记得使用NTFS。在那之前,我想我需要引入一个目录结构来分割和征服复制。 – nswitanek 2010-10-21 02:20:19

0

我不会在一个文件夹中有很多文件,这是一个维护噩梦。但如果你需要的话,不要在FAT上这样做:你有最大的。 64K文件在FAT文件夹中。

读取错误消息

您的具体问题也可能是,你作为错误信息显示均创下一个文件,你不能访问。没有理由相信在这种情况发生之前文件的数量应该改变。毕竟这是一台电脑,而你正在重复相同的操作。

+0

感谢您的有益建议。我也认为我可能只是在步骤13106碰到同一个文件,但是当复制几个不同的目录时,我在相同数量的文件中出现了问题,所以我认为问题在于长文件名,正如上面的回答中所建议的那样。 – nswitanek 2010-10-21 02:23:31

+0

好的,那么。分而治之:-) – knitti 2010-10-21 05:23:06

0

我预测你的外部驱动器的格式是32,而你写入的文件名是45个字符左右。

FAT32在目录中只能有65536个目录条目。长文件名每个使用多个目录条目。和“。”总是占用一个条目。您可以写65536/5 - 1 = 13106条目强烈建议您的文件名每个占用5个条目,并且您有一个FAT32文件系统。这是因为存在使用16位数字作为目录条目偏移量的代码。

此外,你做而不是想要通过FAT中的多1000条目录进行搜索 - 搜索是线性的。即fopen(some_file)会导致操作系统从头开始每次直线前进文件列表,直到它找到some_file或在列表的末尾移动。

简短回答:目录是一件好事。

+0

照亮答案,谢谢。是的,文件名是40或41个字符长,包括文件扩展名后缀,我认为外部驱动器确实格式化为FAT32。我曾认为避免目录结构会更容易,但显然存在我不知道的重要折衷。再次感谢。 – nswitanek 2010-10-21 02:15:55