У меня есть проект, записанный для устройств на базе 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 ГБ (много больше размеров файла, я имею дело с), и предел количества файлов в корневом каталоге. Я определенно не пишу файлы в корневом каталоге.
Существует ограничение на 512 записей в корневом каталоге файловой системы FAT. Это ограничение возникает из-за того, что корневой каталог находится в определенном месте файловой системы FAT.
Для других каталогов это ограничение отсутствует. Кроме того, FAT32 сняла ограничение в 512 записей для корневой файловой системы, рассматривая корневой каталог так же, как и любой другой каталог.
Использование длинных имен файлов - т.е. не в формате 8.3 - означает, что один файл использует несколько записей каталога .
Некоторые Googling находят людей, утверждающих, что каталог FAT32 может иметь максимум 65 536 записей (что было бы меньше файлов, если бы у них были длинные имена файлов). Однако ни один из источников, в которых упоминался этот предел, не казался таким надежным, поэтому я решил проверить это.
Я написал сценарий, который создает файлы с 30-символьными именами файлов, то есть для каждого файла потребуется 4 записи в каталоге. Когда скрипт дошел до файла 16,384, он завершился ошибкой ввода-вывода, и я не смог создать больше файлов в своем тестовом каталоге. Так что, похоже, это подтверждает ограничение на вход в 65 536 человек.
Если вы достигли этого предела в 9 000 файлов, тогда в ваших файлах должно быть не менее 7 записей, каждая из которых соответствует именам файлов длиной не менее 66 символов. Это соответствует тому, что вы делаете? (Или у вас может быть несколько коротких имен файлов и несколько очень, очень длинных, но вы поняли идею.)
Я думаю, что ограничение на количество файлов в каталоге в Fat32 также зависит от длины имен файлов
http://www.microsoft.com/ whdc / system / platform / firmware / fatgen.mspx
Я провел еще несколько тестов (надежное тестирование :-)), пытаясь записать 100 000 каталогов с короткими именами в одном каталоге. Предел был достигнут на уровне 65 536.
Тест проводился на Nexus One под управлением Android 2.2, но я считаю, что результат верен для любой SD-карты FAT32.