Есть ли ограничение для количества файлов в каталоге на SD-карте?

StackOverflow https://stackoverflow.com/questions/2651907

Вопрос

У меня есть проект, написанный для устройств Android. Он генерирует большое количество файлов, каждый день. Это все текстовые файлы и изображения. Приложение использует базу данных для ссылки этих файлов.

Приложение предполагается очистить эти файлы после небольшого использования (возможно, через несколько дней), но этот процесс может работать или не может работать. Это не предмет этого вопроса.

Из-за исторической аварии организация файлов несколько наивна: все в том же каталоге; а. .hidden каталог, который содержит нулевой байт .nomedia Файл для предотвращения индексации MediaScanner его.

Сегодня я вижу сообщение об ошибке:

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

Что касается SDCard, я вижу, у него осталось много хранилищ, но считая

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

Удаление ряда файлов, кажется, позволило создать файл для сегодняшнего дня.

К сожалению, я не пытался touchновый файл, чтобы попытаться воспроизвести ошибку в командной строке; Я также удалил несколько сотен файлов, а не горсть.

Тем не менее, мой вопрос:

  • Есть ли жесткие ограничения на файловые файлы или количество файлов в каталоге?
  • Я даже на правильном пути здесь?

Nota Bene: SD-карта as - есть - то есть я не отформатировал ее, поэтому я думаю, что это будет формат FAT- *.

Формат FAT-32 имеет твердые пределы файловых файлов 2 ГБ (намного выше файлов, с которыми я имею дело) и предел количества файлов в корневом каталоге. Я определенно не пишу файлы в корневом каталоге.

Это было полезно?

Решение

Есть предел на 512 записей в корневом каталоге FAT FileSystem. Этот предел возникает, потому что корневой каталог живет в определенном месте на FiT FileSystems.

Для других каталогов этот предел не на месте. Кроме того, FAT32 удалил предел входа 512 для корневой файловой системы, обработав корневой каталог, так же, как любой другой каталог.

Используя длинные имена файлов - то есть не в формате 8,3 - значит, чем Один файл использует несколько записей каталогов.

Некоторый Googling находит некоторые люди, утверждающие, что каталог FAT32 может иметь максимум 65 536 записей (что было бы меньше файлов, если у них были длинные имена файлов). Однако ни один из источников, которые не упомянули этот предел, казалось, надежным, поэтому я думал, что проверил это.

Я написал сценарий, который создает файлы с помощью 30 файлов символов, что означает, что каждый файл понадобится 4 записи каталога. Когда сценарий попал в файл 16 384, он не удался с ошибкой IO, и я не смог создать больше файлов в моей тестируемой Diremile. Так что это, кажется, подтверждает предел входа 65 536.

Если вы используете этот предел при 9000 файлов, то ваши файлы должны использоваться как минимум 7 записей, каждый, что соответствует именам файлов, которые длиной не менее 66 символов. Это соответствует тому, что вы делаете? (Или у вас могут быть несколько коротких файлов и некоторые очень, очень длинные, но вы получаете идею.)

Другие советы

Я думаю, что предел файлов в каталоге в FAT32 также зависит от длины имена файлов

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

Я сделал еще более тестирование (надежное тестирование :-)), пытаясь написать 100 000 краткосметочных каталогов в одном каталоге. Предел был достигнут на 65 536.

Тест был проведен на Nexus One работает Android 2.2, но я считаю, что результат проводит любой Fat32 SD-карта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top