【问题标题】:python on xp: errno 13 permission denied - limits to number of files in folder?xp上的python:errno 13权限被拒绝-限制文件夹中的文件数?
【发布时间】:2010-10-20 22:36:50
【问题描述】:

我在 XP 上运行 Python 2.6.2。我有大量文本文件 (100k+) 分布在多个文件夹中,我想将它们合并到外部驱动器上的单个文件夹中。

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

我注意到,我使用的所有目标文件夹,无论使用什么源文件夹,最终都包含 13,106 个文件。我无法打开任何新文件以写入具有这么多(或更多文件)的文件夹,这可能是我得到 Errno 13 的原因。

我将不胜感激有关是否以及为什么会出现此问题的建议。

非常感谢, 尼克

【问题讨论】:

  • 在问题中提供您的代码。

标签: python windows-xp


【解决方案1】:

您使用的是 FAT32 吗? FAT32 文件夹中的最大目录条目数为 65.534。如果文件名超过 8.3,则需要多个目录条目。如果您在 13,106 处结束,这表明每个文件名都足够长,需要五个目录条目。

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

【讨论】:

  • 感谢您提供非常有用的答案和链接。当我得到另一个外部驱动器或有机会重新格式化我当前的驱动器时,我会记得使用 NTFS。在那之前,我认为我需要引入一个目录结构来分治复制。
【解决方案2】:

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

阅读错误信息

您的具体问题也可能是,您如错误消息所示正在点击您无法访问的文件。并且没有理由相信在这种情况发生之前的文件数量应该改变。毕竟是一台电脑,你在重复同样的操作。

【讨论】:

  • 感谢您的有用建议。我也认为我可能只是在步骤 13106 中遇到了同一个文件,但是在复制几个不同的目录时,我用相同数量的文件最大化了,所以我认为问题在于文件名很长,正如上述回复中所建议的那样。
  • 好的,那么。分而治之:-)
【解决方案3】:

我预测您的外部驱动器的格式为 32,并且您正在写入的文件名大约有 45 个字符长。

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

此外,您确实想要搜索 FAT 中的多 1000 个条目目录——搜索是线性的。 IE。 fopen(some_file) 将引导操作系统从文件列表线性行进,每次从头开始,直到找到 some_file 或离开列表的末尾。

简短回答:目录是个好东西。

【讨论】:

  • 有启发性的答案,谢谢。是的,文件名长度为 40 或 41 个字符,包括文件扩展名后缀,我认为外部驱动器确实是 FAT32 格式。我曾认为避免使用目录结构会更容易,但显然有一些我不知道的重要权衡。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
相关资源
最近更新 更多