2011-07-16 7 views
0

GoogleのデバイスからSDカードにファイルをダウンロードするアン​​ドロイドアプリがあります。 (理由:私はアプリ内で開くことができないPDFを持っている)。
合計が10000件〜8000件に達するまで、SDカードに正常に書き込みます。 SDに書き込むためデバイスに空き容量がないのにSDカードがいっぱいでない

コード:ライン2によってスロー

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); 

例外:

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互換)、8ギガバイト、FAT32フォーマット。私はDesire HDを使っています。
ご覧のとおり、ファイル名は長いです。 私はディレクトリにファイルを保存を/ mnt/SDカード/(アストロによる)で、例外の後にどの状態:
サイズ :
デバイスフリーサイズ8037:519668573バイトのファイルの
数が任意の4.91 G

です私は知らないSDへの書き込みの制限?
ありがとう

答えて

0

これはFAT32の制限事項です。

FAT32ディレクトリには65,536個のディレクトリエントリがあります。各ファイルと サブディレクトリには、 の名前の長さに応じて2〜13個のエントリが必要です。したがって、これらのエントリは、 のすべてが使用されていると思われる前に消える可能性があります。あなたの合計22,657ファイルの数は非常に 65000エントリを簡単に使用することができます。 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より長い場合は、1つ以上のエントリを占有します。また、長いファイル名は単に文字の合計よりも多くの領域を占有します。ファイルシステムには、チェックサムや短い8.3ファイル名のようなものを作成するオーバーヘッドがあります。

最高のアドバイスは、ファイル名を劇的に短縮することであり、それはあなたの問題を解決するはずです。

これが役に立ちます。

関連する問題