设备上没有剩余空间但SD卡未满

时间:2011-07-16 13:48:24

标签: android linux sd-card

我有Android应用程序,它将谷歌文档中的文件下载到设备上的SD卡。 (原因:有PDF-s我无法在应用程序中打开) 它成功写入SD卡,直到我得到总共10000的〜第8000个文件。

写入SD的代码:

InputStream is = response.getContent();
FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+preferences.getString("username", "manas11")+"/" + tmp_entry.resourceID.replace(":","~_~")+"~_~"+tmp_entry.title));
byte[] buf = new byte[1024];
int len;
while((len=is.read(buf))>0)
    fos.write(buf,0,len);

第2行引发的异常:

java.io.FileNotFoundException: /mnt/sdcard/matulic.realestate.hr/file~_~0B3n2EnTf5ATnYTJkNTNmM2QtZDJjYy00YjNhLWJlZjQtYTE4MTU5MjI2N2E5~_~Kuæa Marina Sevid 399.00 m2 - LJETNA AKCIJA IZVRSN - k359.txt (No space left on device)

SD卡是microSD™存储卡(SD 2.0兼容),8gb,FAT32格式。我正在使用Desire HD 正如您所看到的,文件名很长。 我将文件保存到/ mnt / sdcard /目录中的目录,例外是异常(Astro):
大小:519,668,573字节
文件数量:8037
器件自由尺寸:4.91 G

写入SD有什么限制我不知道吗?
谢谢

2 个答案:

答案 0 :(得分:2)

我相信这个stackoverflow问题会回答你的问题。

Is there a limit for the number of files in a directory on an SD card?

我自己也检查了一些信息,发现它基本上归结为文件数量和文件名长度的限制。从我在上面的链接http://msdn.microsoft.com/en-us/windows/hardware/gg463080.aspx中引用的Microsoft文档中读到的内容,您的文件名长度存在问题。

首先是文件名的长度。较长的文件名占用更多空间。目录中有65,536个32字节条目的限制。这是因为目录文件容器的最大大小为2,097,152字节(65536 * 32)。但是,如果您的文件名超过8.3,则它们将占用的不仅仅是一个条目。长文件名也占用更多空间而不仅仅是它们的字符总和。文件系统存在开销,它会创建像校验和和8.3短文件名这样的东西。

最好的建议是大幅缩短文件名,这应该可以解决您的问题。

希望这有帮助。

答案 1 :(得分:0)

这可能是FAT32的限制。

  

FAT32目录可以有65,536个目录条目。每个文件和   子目录取两个到十三个条目,具体取决于   它的名称长度,所以那些条目可以在你之前消失   认为你已经把它们全部用完了。你总共有22,657个文件   轻松使用65,000个条目。

来自here.

您是否尝试在本地存储时减少文件名?它真的必须那么久吗?