Когда вы retrieve a file by filename
, скорее всего, выполняете линейный поиск в каталоге, содержащем этот файл, вы пропускаете все записи каталога, пока не найдете тот, который соответствует данному имени файла.
Эта операция поиска может быть медленнойесли вы делаете это каждый раз для каждого файла, в каталоге много файлов, и чтение идет медленно (если ваш процессор медленный, вы теряете даже больше).
Возможно, вы захотите создать какой-то индекс,компактный массив пар filename+location
, отсортированный по имени файла, который вы можете сохранить в памяти для быстрого поиска файлов без перечитывания записей каталога.
Вещи могут быть значительно упрощены, если существует постоянное количество файлов и ониимеют одинаковую длину или дополняются до одинаковой длины.В этом случае вам не нужен какой-либо поиск, поскольку вы можете вычислить местоположение каждого файла непосредственно из имени файла, при условии, конечно, что порядок файлов фиксирован.
Единственное практическое отличие между FAT1xи FAT32 в этом контексте - это размер таблицы размещения файлов, этого набора связанных списков / цепочек, который сообщает вам, какие кластеры свободны или заняты данными файла / каталога, и сообщает, какой кластер является следующим в файле / каталоге последал один.В FAT32 элементы цепочки кластеров 32-битные, в 2 раза больше, чем в FAT16.Если количество используемых кластеров невелико (менее ~ 64 КБ), вы будете читать в два раза больше данных из FAT32 при обходе цепочек кластеров по сравнению с FAT16.Кроме того, поиск свободного кластера на FAT32 (когда вы создаете новый файл / dir или увеличиваете существующий) может быть медленным, если на диске много кластеров (и их может быть до 2 ^ 28 в FAT32 AFAIR против 2 ^16 из FAT16).Вы не хотите каждый раз начинать поиск свободного кластера с начала FAT.Вы хотите где-нибудь сохранить указатель на последнее место, где вы остановили поиск, и при следующем поиске оттуда, а затем перейти к началу FAT, когда достигните конца FAT.