【问题标题】:No space left on device but SD card not full设备上没有剩余空间,但 SD 卡未满
【发布时间】:2011-07-16 13:48:24
【问题描述】:

我有一个 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 有任何限制吗?
谢谢

【问题讨论】:

    标签: android linux sd-card


    【解决方案1】:

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

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      这可能是 FAT32 的限制。

      一个 FAT32 目录可以有 65,536 个目录条目。每个文件和 子目录有 2 到 13 个条目,具体取决于 它的名字的长度,所以这些条目可以在你之前消失很久 认为你已经用完了它们。您总共有 22,657 个文件可以非常 轻松使用 65,000 个条目。

      来自here.

      您是否尝试在本地存储文件时减少文件名?真的要那么长吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 2012-01-14
        • 2012-05-15
        • 2018-11-22
        • 2015-07-21
        • 2020-12-16
        • 2014-11-20
        相关资源
        最近更新 更多