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个字符长的文件名.这与你正在做的事情相符吗?(或者你可以有一些简短的文件名和一些非常非常长的文件名,但你明白了.)
我做了一些更多的测试(可靠测试:-)),试图在单个目录中写入 100,000 个短命名目录。上限达到了 65,536。
测试是在运行 Android 2.2 的 Nexus One 上完成的,但我相信结果适用于任何 FAT32 SD 卡。
| 归档时间: |
|
| 查看次数: |
11395 次 |
| 最近记录: |