Я хочу создать дерево содержимого CD в памяти, используя структуры и std :: vector, как для каталогов, так и для файлов.
Я не буду сканировать файлы подробно, мне интересно только, являются ли они каталогами или обычными файлами.
Какой самый лучший и быстрый подход для этого?
Может ли рекурсивное сканирование заставить головку CD-диска прыгать по диску в поисках файлов / папок?
Я хочу уменьшить скачки головки CD-устройства и сделать это как можно быстрее.
Кстати: я использую UNIX и C / C ++.
Согласно спецификации ISO 9660:
В дескрипторе основного тома содержится запись корневого каталога, описывающая местоположение смежного корневого каталога. (Как и в UNIX, каталоги отображаются в виде файлов для специального использования операционной системы). Записи каталога последовательно хранятся в этом регионе. Оценка имен файлов ISO 9660 начинается в этом месте. Корневой каталог хранится в виде экстента или последовательного ряда секторов, который содержит каждую из записей каталога, появляющихся в корневом каталоге.
Учитывая эту информацию, я бы предположил, что прыжки с головы довольно неизбежны. Вы начнете с этого каталога верхнего уровня, скажем, Track X Sector Y, выполните сканирование, чтобы найти первый каталог для прохождения, и двигаетесь вниз по диску. Так что голова будет прыгать всякий раз, когда вы ныряете дальше в дерево, независимо от того, как вы «ныряете». Если бы был способ сканирования диска по треку, а затем по сектору, это принесло бы пользу, но я не уверен, как это сделать, и стоит ли его реализовывать.
Ваше решение влияет не столько на производительность CDFS, сколько на нагрузку вашего процесса. Рекурсия влечет за собой накладные расходы на выделение стека, и в этом есть последствия для памяти. Но что касается CDFS, то, похоже, он находится под вашим контролем.
Я бы сказал, пойти с рекурсией, поскольку это имеет логический смысл для обходов деревьев
Других решений пока нет …