12

Android デバイス用に作成されたプロジェクトがあります。毎日大量のファイルが生成されます。これらはすべてテキストファイルと画像です。アプリはデータベースを使用してこれらのファイルを参照します。

アプリは、少し使用した後 (おそらく数日後) にこれらのファイルを消去することになっていますが、このプロセスが機能している場合と機能していない場合があります。これはこの質問の主題ではありません。

歴史的な事故のため、ファイルの編成はやや単純です。すべてが同じディレクトリにあります。MediaScanner がインデックスを作成するのを防ぐための.hiddenゼロ バイト ファイルを含むディレクトリ。.nomedia

今日、報告されたエラーが表示されます。

java.io.IOException: Cannot create: /sdcard/.hidden/file-4200.html
  at java.io.File.createNewFile(File.java:1263)

SDカードに関しては、十分なストレージが残っているようですが、数えています

$ cd /Volumes/NO_NAME/.hidden
$ ls | wc -w
9058

いくつかのファイルを削除したことで、今日のファイル作成を進めることができたようです。

残念ながら、touchコマンドラインでエラーを再現するために新しいファイルを作成しようとはしませんでした。また、一握りではなく数百のファイルを削除しました。

ただし、私の質問は次のとおりです。

  • ディレクトリ内のファイルサイズまたはファイル数に厳しい制限はありますか?
  • 私はここで正しい軌道に乗っていますか?

注記: SD カードは現状のままです。つまり、フォーマットしていないので、FAT-* フォーマットであると推測されます。

FAT-32 フォーマットには、2 GB のファイル サイズ (私が扱っているファイル サイズをはるかに超える) のハード リミットと、ルート ディレクトリ内のファイル数の制限があります。ルートディレクトリにファイルを書き込んでいるわけではありません。

4

4 に答える 4

25

FAT ファイルシステムのルート ディレクトリには 512 エントリという制限があります。この制限は、ルート ディレクトリが FAT ファイル システムの特定の場所に存在するために発生します。

他のディレクトリの場合、この制限はありません。さらに、FAT32 は、ルート ディレクトリを他のディレクトリと同じように扱うことで、ルート ファイルシステムの 512 エントリの制限を取り除きました。

8.3 形式ではない長いファイル名を使用すると、1 つのファイルが複数のディレクトリ エントリを使用することになります。

一部のグーグル検索では、FAT32 ディレクトリには最大 65,536 のエントリを含めることができると主張する人がいます(長いファイル名の場合、これはより少ないファイルになります)。ただし、この制限について言及している情報源はどれも信頼できるようには見えなかったので、これをテストしようと思いました.

30 文字のファイル名を持つファイルを作成するスクリプトを作成しました。つまり、各ファイルには 4 つのディレクトリ エントリが必要です。スクリプトがファイル 16,384 に達したとき、IO エラーで失敗し、テスト ディレクトリにそれ以上ファイルを作成できませんでした。したがって、これは 65,536 エントリの制限を検証しているようです。

9,000 個のファイルでこの制限に達している場合、ファイルは少なくとも 66 文字の長さのファイル名に対応する少なくとも 7 つのエントリを使用する必要があります。これはあなたがしていることと一致していますか?(または、いくつかの短いファイル名といくつかの非常に長いファイル名を使用することもできますが、アイデアは理解できます。)

于 2010-04-16T10:40:51.050 に答える
5

Fat32のディレクトリ内のファイルの制限は、ファイル名の長さにも依存すると思います

http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

于 2010-04-16T09:59:37.207 に答える
5

単一のディレクトリに100,000の短い名前のディレクトリを書き込もうとして、さらにテストを行いました(信頼できるテスト:-))。上限の 65,536 に達しました。

テストは Android 2.2 を実行している Nexus One で行われましたが、結果はどの FAT32 SD カードにも当てはまると思います。

于 2010-08-02T13:31:39.153 に答える