Доброго всем времени суток! Честно говоря работал с файловой системой очень мало, потому что в основном приложения создаю для баз данных. Но вот уже давно не дает покоя вопрос: почему поиск в Винде такой тормозной??? В свое время писал под ZX-Spectrum - понятно там уже все морально устарело, так вот - там есть на нулевой дорожке каталог - считал его и все никаких проблем с поиском. Здесь же мама не горюй... :o Как я понимаю в файловой системе есть таблица MFT - в чем проблема считать эту таблицу и найти файлы? Так нет все реализуем через FindFirst-FindNext - не знаю как-то странно (знаю и про NtQueryDirectoryFile - но там опять идея та же). Получается для того чтобы просто вывести список файлов и директорий - винт шурудит так как будто ему собрались оторвать башку. Перечитал массу тем. Читал разные статьи, но так и не пойму: - Почему не искать через таблицу MFT? Или я не понимаю организации файловой системы - тогда плиз, объясните.
И FFFile и FNFile вызывают NtQueryDirectory. И поиск не будет идти по всему винту, это было бы как минимум странно если бы эти данные не хранились отдельно, обновляясь при каких-то событиях. Есть ведь кеш ФС.
only нет по всему винту наверное не идет - но во время поиска шурудит Есть - но поиск будет быстрее намного лишь после того как прошурудишь все папки с помощью FFFile - FNFile
Размер MFT может достигать десятков, а то и сотен мегабайт, так что полный перебор быстрее не будет. Второе, файлы в МFT хранятся без пути, есть только ссылка на родительский каталог. Т.е. для каждой записи в MFT нужно рекурсивно строить полный путь, чтобы узнать наш это файл или нет. Получается, что для перебора файлов в одной директории нужно перебрать все файлы на ниске.
в чем сложность была - распределить по таблицам: одна таблица например: id, name, attr, parent поиск в подобном выполняется намного быстрее - да и зачем поиск считать таблицу и далее произвести манипуляции с нужными данными и все... Открытие директорий тоже было бы быстрее - вообще мнгновенным...