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

问题描述 投票:11回答:4

我有一个专为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的文件大小硬限制(远高于我正在处理的文件大小),并且根目录中的文件数限制。我绝对不是在根目录中写文件。

java android sd-card ioexception fat32
4个回答
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个字符。这符合您的工作吗? (或者您可以使用一些短文件名和一些非常长的文件名,但是您会明白的。)


5
投票

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

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


4
投票

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.