Существует ли предел для количества файлов в каталоге на SD-карте?

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

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

Из-за исторического несчастного случая, организация файлов несколько наивна: все находится в том же каталоге; a .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луг новый файл, чтобы попытаться воспроизвести ошибку на командной строке; я также удалил несколько сотен файлов, а не небольшое количество.

Однако мой вопрос:

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

Нотабене: SD-карта как есть - т.е. Я не отформатировал ее, таким образом, я предположил бы, что это будет FAT -* формат.

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

11
задан Jonas 21 December 2010 в 16:37
поделиться

3 ответа

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

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

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

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

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

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

21
ответ дан 3 December 2019 в 02:52
поделиться

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

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

5
ответ дан 3 December 2019 в 02:52
поделиться

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

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

4
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: