Есть ли ограничение на количество файлов в каталоге на SD-карте? - PullRequest
11 голосов
/ 16 апреля 2010

У меня есть проект, написанный для устройств 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-карта как есть - то есть я не отформатировал ее, поэтому я предполагаю, что это будет формат FAT- *.

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

Ответы [ 3 ]

21 голосов
/ 16 апреля 2010

Существует ограничение на 512 записей в корневом каталоге файловой системы FAT. Это ограничение обусловлено тем, что корневой каталог находится в определенном месте в файловых системах FAT.

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

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

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

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

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

5 голосов
/ 16 апреля 2010

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

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

4 голосов
/ 02 августа 2010

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

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

...