SD卡上的目录中的文件数量是否有限制?

时间:2010-04-16 09:35:46

标签: java android sd-card ioexception fat32

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

应用程序应该在一点点使用后(可能在几天之后)清理这些文件,但这个过程可能会也可能不会起作用。这不是这个问题的主题。

由于历史性事故,文件的组织有点幼稚:一切都在同一个目录中;一个.hidden目录,其中包含一个零字节.nomedia文件,以防止MediaScanner将其编入索引。

今天,我看到报告错误:

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

关于SD卡,我看到它有足够的存储空间,但是计算

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

删除许多文件似乎已经允许今天的文件创建继续。

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

但是,我的问题是:

  • 目录中的文件大小或文件数是否有硬限制?
  • 我甚至在这里走在正确的轨道上?

Nota Bene: SD卡是原样的 - 即我没有格式化它,所以我猜它会是FAT- *格式。

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

4 个答案:

答案 0 :(得分:21)

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个字符长的文件名。这与你正在做的事情相符吗? (或者你可以有一些简短的文件名和一些非常非常长的文件名,但你明白了。)

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

我做了一些测试(可靠测试:-)),尝试在一个目录中编写100,000个短命名目录。限制达到65,536。

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

答案 3 :(得分:-1)

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