12

我有一个为 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

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

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

但是,我的问题是:

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

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

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

4

4 回答 4

25

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

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

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

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

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

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

于 2010-04-16T10:40:51.050 回答
5

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

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

于 2010-04-16T09:59:37.207 回答
5

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

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

于 2010-08-02T13:31:39.153 回答
-1

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

于 2020-01-27T16:25:01.363 回答