【问题标题】:Is there a limit for the number of files in a directory on an SD card?SD卡上目录中的文件数量是否有限制?
【发布时间】:2011-02-08 18:18:54
【问题描述】:

我有一个为 Android 设备编写的项目。它每天都会生成大量文件。这些都是文本文件和图像。该应用使用数据库来引用这些文件。

该应用程序应该在稍微使用后(可能几天后)清除这些文件,但这个过程可能会或可能不会起作用。这不是这个问题的主题。

由于历史事故,文件的组织有些幼稚:所有内容都在同一个目录中;一个 .hidden 目录,其中包含一个零字节 .nomedia 文件,以防止 MediaScanner 对其进行索引。

今天看到报错:

java.io.IOException: Cannot create: /sdcard/.hidden/file-4200.html
  at java.io.File.createNewFile(File.java:1263)

关于 sdcard,我看到它还有很多存储空间,但还在计数中

$ cd /Volumes/NO_NAME/.hidden
$ ls | wc -w
9058

删除一些文件似乎允许今天的文件创建继续进行。

很遗憾,我没有尝试touching 一个新文件来尝试在命令行上重现错误;我还删除了数百个文件,而不是少数。

但是,我的问题是:

  • 对目录中的文件大小或文件数量是否有硬性限制?
  • 我是否走在正确的轨道上?

注意事项: SD 卡是原样的 - 即我没有格式化它,所以我猜它是 FAT-* 格式。

FAT-32 格式具有 2GB 文件大小的硬性限制(远高于我正在处理的文件大小)和根目录中的文件数量限制。我绝对不是在根目录下写文件。

【问题讨论】:

    标签: java android sd-card ioexception fat32


    【解决方案1】:

    我认为 Fat32 目录中文件的限制也取决于文件名的长度

    http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

    【讨论】:

    • 事实上,FAT32 规范说:“最大有效目录大小为 2^21 字节。”目录是 32 字节目录条目的特殊文件,每个条目包含一个 8.3 文件名。这意味着 65,536 个短文件名的限制,而长文件名占用多个目录条目,有效地降低了限制。我认为规范应该是信息的主要来源,而不是针对具体的单一设置的临时实验。接受的答案仍然很有价值,即使它实际上并不能证明任何普遍性。
    【解决方案2】:

    FAT 文件系统的根目录中有 512 个条目的限制。这个限制是因为根目录位于 FAT 文件系统的特定位置。

    对于其他目录,此限制不存在。此外,FAT32 删除了根文件系统的 512 个条目限制,将根目录视为与任何其他目录相同。

    使用长文件名 - 即不是 8.3 格式 - 意味着比 a single file uses multiple directory entries

    一些Googling finds some people claiming that a FAT32 directory can have a maximum of 65,536 entries(如果文件名很长,文件会更少)。然而,提到这个限制的消息来源似乎都不可靠,所以我想我会测试一下。

    我编写了一个脚本,它创建具有 30 个字符文件名的文件,这意味着每个文件需要 4 个目录条目。当脚本到达文件 16,384 时,它因 IO 错误而失败,我无法在我的测试目录中创建更多文件。所以这似乎验证了 65,536 个条目的限制。

    如果您在 9,000 个文件中达到此限制,那么您的文件必须使用至少 7 个条目,每个条目对应于至少 66 个字符长的文件名。这符合你正在做的事情吗? (或者你可以有一些短文件名和一些非常非常长的文件名,但你明白了。)

    【讨论】:

    • 很好的答案,包括初级研究。这听起来非常可行。该错误最近再次发生,因此将测试该理论并报告。
    • 绝对物超所值。文件名中有大约 108 个字符的 6k 个文件。文件名中有大约 9 个字符的 3.5k 个文件。谢谢。
    • 你所做的研究给我留下了深刻的印象。问题:随着文件数量的增加,您是否注意到任何性能下降?
    【解决方案3】:

    我做了更多的测试(可靠的测试:-)),试图在一个目录中写入 100,000 个短名称目录。达到上限 65,536。

    测试是在运行 Android 2.2 的 Nexus One 上完成的,但我相信结果适用于任何 FAT32 SD 卡。

    【讨论】:

    • 太棒了!谢谢!这与@Dave Webb 的回答一致,但与对设备的初步研究一致。干得好!
    【解决方案4】:

    有一个实际限制远低于512, 取决于您连接的 Android 设备
    当我将手机(Samsung A5 2015)连接到我的电脑(Ubuntu)时: 在我的电脑上,我可以轻松地在手机上读取/写入文件, 包含 300 个文件的目录除外。 任何简单的动作都是无限慢的: 列出内容,复制文件,删除文件。 . . 所以,我认为我手机的文件数量是有实际限制的。 我也有没有这个问题的平板电脑。

    【讨论】:

    • 我遇到了一个非常非常慢的复制问题,我已经阅读了对我没有帮助的以前的答案。我终于找到了问题在这个设备上,在这个目录上。它回答了我的问题。我认为它对其他人有用。
    • 请不要添加“我也是”作为答案。它没有提供问题的答案。如果您有不同但相关的问题,请询问(如果提供上下文,请参考当前问题)。如果您对这个特定问题感兴趣,可以投票、发表评论或在获得足够声誉后开始赏金。
    • 我的问题完全一样:SD卡上目录中的文件数量是否有限制? (在我的手机上)。我发现 300 个文件的数量对于这个设备的实际使用来说太多了。如果您要我删除我的答案,请告诉我。我会删除它。
    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2014-08-12
    • 2012-05-26
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多