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

jam*_*esh 11 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)
Run Code Online (Sandbox Code Playgroud)

关于SD卡,我看到它有足够的存储空间,但数量

$ cd /Volumes/NO_NAME/.hidden
$ ls | wc -w
9058
Run Code Online (Sandbox Code Playgroud)

删除大量文件似乎允许今天的文件创建继续进行.

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

但是,我的问题是:

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

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

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

Dav*_*ebb 21

FAT文件系统的根目录中有512个条目的限制.出现此限制是因为根目录位于FAT文件系统上的特定位置.

对于其他目录,此限制不到位.此外,FAT32通过将根目录视为与任何其他目录相同来删除了根文件系统的512条目限制.

使用长文件名(即不是8.3格式)意味着比单个文件使用多个目录条目.

一些谷歌搜索发现有些人声称FAT32目录最多可以有65,536个条目(如果文件名长,那么文件就会减少).但是,提到这个限制的消息来源似乎都不可靠,所以我想我会测试一下.

我写了一个脚本,它创建了30个字符文件名的文件,这意味着每个文件需要4个目录条目.当脚本到达文件16,384时,它失败并出现IO错误,我无法在我的测试指南中创建更多文件.所以这似乎证实了65,536的进入限制.

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


Vic*_*tor 5

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

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


Ofe*_*erR 5

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

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