2011-07-16 113 views
0

我有Android應用程序,它將文件從Google文檔下載到設備上的SD卡。 (原因:有PDF-s,我無法在應用程序中打開)。
它成功寫入SD卡,直到我得到總共10000個〜8000個文件。設備上沒有剩餘空間,但SD卡不充滿

代碼用於寫入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/SD卡/哪個異常後狀態是(由天文):
大小:519668573個字節
數量的文件:8037
設備自由尺寸:4.91ģ

是否有任何寫入SD的限制我不知道?
謝謝

回答

0

這可能是FAT32的限制。

一個FAT32目錄可以有65,536個目錄條目。每個文件和 子目錄都需要2到13個條目,具體取決於其名稱的長度,因此這些條目可能會在您認爲已經全部使用它們很久之前消失。你總共22,657個文件可以很容易地使用65,000個條目。

here.

您是否嘗試過在本地存儲,當它減少了文件名?它真的要這麼長嗎?

2

我相信這個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文件名稱。

最好的建議是大幅縮短文件名,這應該可以解決您的問題。

希望這會有所幫助。

相關問題